我会使用QSet,但我需要保留项目的插入顺序,因为我需要稍后循环遍历该列表。
QSet<QString> notes;
notes << "a" << "b" << "c" << "a";
foreach(const QString ¬e, notes)
qDebug() << note;
将输出:
a
c
b
而不是:
a
b
c
我知道我能做到:
if(!list.contains(item))
list << item;
或者实施我自己的更好的appraoch。我只是想知道是否存在通常更快且经过充分测试的原生数据结构......
答案 0 :(得分:1)
如果你想保留插入顺序和避免重复,那么在Qt中没有任何准备好的东西。
一个简单的辅助函数可以完成这项任务:
template <typename T>
bool appendUnique(QList<T> & data, QSet<T> & index, const T & value) {
if (index.contains(value))
return false;
data.append(value);
index.insert(value);
return true;
}