代码之家  ›  专栏  ›  技术社区  ›  Jack

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

  •  0
  • Jack  · 技术社区  · 9 年前

    我会使用 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;
    

    或者实施我自己的任何更好的方法。我只是想知道是否有一种本地数据结构通常更快、测试良好,等等。。。

    1 回复  |  直到 9 年前
        1
  •  1
  •   Kuba hasn't forgotten Monica    9 年前

    如果要保留插入顺序 避免重复,那么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;
    }