【发布时间】:2012-11-14 09:04:32
【问题描述】:
我需要一个 STL 容器,它能够:
1) 只存储独特的项目
2) 有一个基于项目添加到容器中的时间的保证顺序
所以,如果我按顺序将项目 A、B 和 C 添加到我的容器中,
A 始终可以通过以下方式访问:myItems().begin() 或 myItems[0]
B 始终可以通过以下方式访问:
myItems.begin() + 1 或 myItems[1]
C 将始终可以通过以下方式访问:
myItems.begin() + 2 或 myItems[2]
我目前使用的unordered_set 不能满足需求#2。如果我使用常规的set,我可以指定小于函数进行排序,但排序可能会随着新项目添加到容器中而改变。
使用常规的set,如果我插入一个小于 A 的新项目 D,将无法再通过 myItems.begin() 访问 A。我可能是错的,但这是我对集合排序工作原理的理解。
如果我使用list,我可以通过在插入每个新项目后调用list::unique() 来强制执行唯一方面:
myList.sort();
myList.unique();
或者我可以将std::find 与列表或向量一起使用并手动强制执行唯一方面:
iter = std::find(myList.begin(), myList.end(), item);
//Only add item if not already in list/vector...
if(iter == myList.end())
{
myList.push_back(item);
}
是否有更好的容器/解决方案满足我的特殊需求?
【问题讨论】:
-
您是如何达到这些要求的?在我看来,它们是非正统的。
-
@LightnessRacesinOrbit:在我看来,这就像 FIFO 缓存的构建块。
标签: c++ stl containers