C++中保持插入顺序的set数据结构

6

是否有任何C++内置的集合数据结构可以保持插入的顺序?无论是哈希表实现的集合还是平衡二叉树实现的集合都可以。


1
请查看Boost.MultiIndex - Benjamin Lindley
3个回答

5
在C++11中,std::multisetstd::multimap都保证同值/同键元素的插入顺序。引用C++11标准:
23.2.4关联容器
如果每个关键字最多只能包含一个元素,则关联容器支持唯一键。否则,它支持等价键。Set和map类支持唯一键;multiset和multimap类支持等价键。对于multiset和multimap,insert、emplace和erase保留等价元素的相对顺序
必须明确说明,它们的无序(哈希)变体std::unordered_multisetstd::unordered_multimap不保证(未指定)元素插入的相对顺序。

1

1
我不确定我是否完全理解您的问题,但听起来像链表可以满足您的需求。您只需推入和弹出以保持列表中的顺序。您可以在此处查看参考资料: http://www.cplusplus.com/reference/list/list/ 此外,您可以使用unique方法删除重复项,使其模拟集合数据结构。

我需要一个类似于Java中的LinkedHashMap的数据结构,它能够像HashMap一样提供搜索性能,并具有按插入顺序迭代项的能力。 - Lahiru
这不是最理想的方法,但你可以使用列表。使用列表,你可以使用push_back将所有项目推到列表的末尾。然后,在迭代之前,使用unique(确保它是一个集合)。最后,你可以使用提供的迭代器从列表开头开始迭代,从而保持顺序。...除非我对你的问题的理解有误,就像我的评论一样,这是一个明显的可能性。 - Minkus CNB
首先,我提到了“集合数据结构”。 在C++中,set和unordered_set都具有更好的搜索性能。因为STL set使用二叉树,而unordered_set使用哈希。我想要搜索性能和检索顺序的机会。 - Lahiru

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接