是否存在保留插入顺序的C ++内置集数据结构? 集合是散列集还是由平衡二叉树实现的集合都不成问题。
答案 0 :(得分:5)
在 C ++ 11 中,std::multiset
和std::multimap
都保证保留同值/同键元素的插入顺序。
引用C ++ 11标准,
23.2.4关联容器
4 关联容器支持唯一键,如果每个键最多可包含一个元素。除此以外, 它支持等效键。 set和map类支持唯一键; multiset和multimap类 支持等效键。 对于
multiset
和multimap
,insert,emplace和erase会保留相对值 等效元素的排序。
必须明确声明,它们的无序(散列)变体std::unordered_multiset
和std::unordered_multimap
不保证(未指定)元素插入的相对顺序。
答案 1 :(得分:1)
如果我理解你的要求,我不是百分百肯定,但听起来像链接列表足以满足你的需求。您可以按下并弹出以按照您放入的顺序保留列表。您可以在此处查看参考:http://www.cplusplus.com/reference/list/list/
此外,您可以使用唯一方法删除重复项,使其模拟设置数据结构。
答案 2 :(得分:1)
Boost保证所有关联容器都保留插入顺序。
a_eq.insert(t):如果a_eq中存在包含等于t的元素的范围,则将t插入该范围的末尾。