是否存在Qt内置数据结构,忽略项目的重复插入?

时间:2016-02-03 19:24:57

标签: c++ list qt data-structures

我会使用QSet,但我需要保留项目的插入顺序,因为我需要稍后循环遍历该列表。

 QSet<QString> notes;
    notes << "a" << "b" << "c" << "a";
    foreach(const QString &note, notes)
        qDebug() << note;

将输出:

a
c
b

而不是:

a
b
c

我知道我能做到:

if(!list.contains(item))
            list << item;

或者实施我自己的更好的appraoch。我只是想知道是否存在通常更快且经过充分测试的原生数据结构......

1 个答案:

答案 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;
}