c ++设置保持插入顺序的数据结构

时间:2014-01-09 06:44:07

标签: c++ boost data-structures set

是否存在保留插入顺序的C ++内置集数据结构? 集合是散列集还是由平衡二叉树实现的集合都不成问题。

3 个答案:

答案 0 :(得分:5)

C ++ 11 中,std::multisetstd::multimap都保证保留同值/同键元素的插入顺序。

引用C ++ 11标准,

  

23.2.4关联容器

     

4 关联容器支持唯一键,如果每个键最多可包含一个元素。除此以外,   它支持等效键。 set和map类支持唯一键; multiset和multimap类   支持等效键。 对于multisetmultimap,insert,emplace和erase会保留相对值   等效元素的排序

必须明确声明,它们的无序(散列)变体std::unordered_multisetstd::unordered_multimap 保证(未指定)元素插入的相对顺序。

答案 1 :(得分:1)

如果我理解你的要求,我不是百分百肯定,但听起来像链接列表足以满足你的需求。您可以按下并弹出以按照您放入的顺序保留列表。您可以在此处查看参考:http://www.cplusplus.com/reference/list/list/

此外,您可以使用唯一方法删除重复项,使其模拟设置数据结构。

答案 2 :(得分:1)

Boost保证所有关联容器都保留插入顺序。

  

a_eq.insert(t):如果a_eq中存在包含等于t的元素的范围,则将t插入该范围的末尾。

ref:https://www.boost.org/doc/libs/1_68_0/doc/html/container/cpp_conformance.html#container.cpp_conformance.insertion_hints