我对STL不太有经验,所以我不确定这里最好的方法。
我有一组操作,每个操作都绑定到一个唯一的ID上。为了确保不重复这些操作,我最初想将它们存储在std::map中,按ID键键。但是,我需要保留严格的内部命令,以便在我解除操作时,它们以相反的顺序被添加。
任何给定的操作列表都可以是从一个或两个项目到几千个。如果我切换到手动检查一个vector的副本(即,迭代遍历和checikng ),我会失去什么吗?或者,是否有某种形式的map或其他容器可以让我按ID查找,但不会在内部排序或重新排序我的元素?
发布于 2013-03-03 21:55:30
您可能需要使用索引映射,它可以支持映射的插入顺序。
struct Item
{
string name;
int data;
};
struct ItemTag {};
typedef multi_index_container<
Item,
indexed_by<
random_access<>, // this index represents insertion order
hashed_unique< tag<ItemTag>, member<Item, string, &Item::name> >
>
> ItemsMap;发布于 2013-03-03 21:56:25
听起来你需要Boost.MultiIndex
Boost多索引容器库提供了一个名为multi_index_container的类模板,它允许构造具有不同排序和访问语义的一个或多个索引的容器。索引提供了类似于STL容器的接口,使使用它们变得熟悉。对同一组元素进行多索引的概念是从关系数据库术语中借用的,并允许在简单集和映射不够的情况下,本着多重索引关系表的精神规范复杂的数据结构。根据类似的STL容器,如std::set、std::list和散列,提供了广泛的索引选择。
https://stackoverflow.com/questions/15191337
复制相似问题