QT容器,具有指定顺序且无重复
我需要一些类似于QSet的东西,但是我需要按照插入它们的顺序保存这些项目QT容器,具有指定顺序且无重复,qt,containers,qset,Qt,Containers,Qset,我需要一些类似于QSet的东西,但是我需要按照插入它们的顺序保存这些项目 有这样的事情吗?也许QList或QVector会有所帮助 QList<QString> stringList; //By the way, Qt provides QStringList as a typedef for QList<QString> stringList.append("A"); stringList.append("B"); qDebug() << stringLi
有这样的事情吗?也许QList或QVector会有所帮助
QList<QString> stringList;
//By the way, Qt provides QStringList as a typedef for QList<QString>
stringList.append("A");
stringList.append("B");
qDebug() << stringList.at(0); //A
qDebug() << stringList.at(1); //B
QList字符串列表;
//顺便说一下,Qt提供QStringList作为QList的typedef
字符串列表。附加(“A”);
字符串列表。附加(“B”);
qDebug()我在Qt和STL中都没有发现类似的现成信息。我想Boost也有类似的功能,但自己做并不难
您可以像这样对QHash
进行包装:
template<typename T>
class MySet : QHash<T, int>
{
public:
using QHash<T, int>::QHash;
QVector<T> values() //this 'hides' the base QHash::values() of QHash
{
QVector<T> vec(count());
for(auto it = cbegin(); it != end(); ++it)
{
vec[it.value()] = it.key();
}
return vec;
}
void insert(const T &value)
{
if(!contains(value))
{
insert(value, m_Data.count());
}
}
};
然后按顺序打印这些值。如果您需要更多的complete
支持,比如迭代器也可以按照您想要的顺序进行迭代,那么您必须重新实现更多的功能,但要点是一样的。毕竟,QSet
也是内部的QHash
。请注意,以上内容不支持不经修改就删除。没有足够的信息可供响应:您使用什么类型的项目,您希望如何插入和访问它们。。。它可以是下一个容器中的任何一个:,,等等。。。请参阅@VladimirBershov-您提到的容器要么重复保存,要么不按我插入的顺序保存项目。为什么不简单地保存,或者?因为我不想要重复项(并且我不想每次添加新值时都手动检查该值是否存在)
MySet<QString> set;
set.insert("1");
set.insert("2");
set.insert("3");
qDebug() << set.values();