【发布时间】:2016-05-13 04:06:56
【问题描述】:
我会使用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;
或者实现我自己的任何更好的方法。我只是想知道是否存在通常更快且经过良好测试的本机数据结构等...
【问题讨论】:
-
如果不是here,并且没有更新的文档,没有。你在 STL 中也没有它。制作一个通用适配器来满足您的需求。
-
根据您的需要(例如,内存使用与插入速度的重要性),您可以创建一个使用
std::vector<std::set<std::string>::iterator>和std::set<std::string>的类。这使您可以快速检查它是否已包含并保留插入顺序,显然会产生一些存储开销。 (或等效的 Qt 类) -
如果您的集合足够小,您不妨使用列表方法。
标签: c++ list qt data-structures