c++ - std::multiset 是否保证插入顺序?

标签 c++ stl data-structures standard-library

我有一个 std::multiset存储 class A 的元素.我提供了自己的 operator< 实现对于这个类。我的问题是,如果我在这个多重集中插入​​两个等效对象,它们的顺序是否得到保证?例如,首先我插入一个对象 a1到集合中,然后我插入一个等效对象 a2进入这个集合。我可以期待 a1来到a2当我遍历集合时?如果没有,有没有办法使用 multiset 来实现这一点?

最佳答案

在 C++03 中,您不能保证 inserterase 保留 相对顺序。然而,这在 C++0x 中有所改变:

n3092, §23.2.4/4: An associative container supports unique keys if it may contain at most one element for each key. Otherwise, it supports equivalent keys. The set and map classes support unique keys; the multiset and multimap classes support equivalent keys. For multiset and multimap, insert and erase preserve the relative ordering of equivalent elements. Emphasis mine.

这在 defect report 中进行了讨论. This page是关于这个问题的评论的集合,它写得很好,而且非常充实。 (我非常推荐在之前的“概述”链接上阅读这篇文章。)

在该评论页面中,您可以找到当前实现的比较,因此您可以检查您打算使用的实现是否符合您的预期。

我想不出一种方法来强行将您想要的命令从我的脑海中排除。 :/

关于c++ - std::multiset 是否保证插入顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2643473/

相关文章:

sql - Oracle 对非分层数据的分层查询

c++ - boost iostream问题

c++ - 标准转换 :Qualification conversions

c++ - 从动态加载的dll内部调用C++函数

c++ - 带有 remove_copy_if 的 back_insert_iterator

java - 列表java中的相等值

c - 实现 TRIE 数据结构

c++ - 如何使用 operator[] 访问结构的指定字段值

c++ - 将 vector 复制到队列中

c++ - 从 C++ STL 集合中获取通用 key_type