我需要类似于 QSet 的东西,但我需要按照插入的顺序保存项目
有这样的事吗?
我不知道在 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());
}
}
};
用法与以下内容非常相似QSet
:
MySet<QString> set;
set.insert("1");
set.insert("2");
set.insert("3");
qDebug() << set.values();
并按顺序打印值。如果您需要更多complete
支持,例如迭代器也以您想要的顺序进行迭代,您将不得不重新实现更多功能,但它的要点是相同的。毕竟QSet
在内部QHash
也是如此。请注意,以上不支持不修改就删除。
也许 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