Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
QT容器,具有指定顺序且无重复_Qt_Containers_Qset - Fatal编程技术网

QT容器,具有指定顺序且无重复

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

我需要一些类似于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() << 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();