这让我觉得我应该能够在Stackoverflow上找到它,但也许我在这里搜索错误的术语。
我有一个类
的场景class Foo
{
int key;
int b;
...
}
我希望将该类的新元素推送到列表中。物品数量事先未知。
同时,我希望能够快速检查具有某个键的元素的存在(并检索),例如键== 5。
所以,总结一下:
对此的一个解决方案让我感到“使用std :: list来存储项目,并使用std :: unordered_map来检索它们,并使用一些簿记”。我当然可以自己实现它,但是想知道这样的东西是否已经在STL中以方便的形式存在。
编辑:要抢占该建议,std :: map 不是解决方案,因为它基于某些键进行排序。也就是说,它不会保留我推送项目的顺序。
答案 0 :(得分:2)
STL没有那种容器,您可以使用std :: unordered_map和std :: list编写自己的容器。将键映射到std :: unordered_map中的列表迭代器,并将键值对存储在std :: list中。
void add(const Key& key, const Value& value)
{
auto iterator = list.insert(list.end(), std::pair<Key, Value>(key, value));
map[key] = iterator;
}
void remove(const Key& key)
{
auto iterator = map[key];
map.erase(key);
list.erase(iterator);
}
或者使用boost多索引容器 http://www.boost.org/doc/libs/1_57_0/libs/multi_index/doc/tutorial/index.html