我有一个 std::multiset
存储 class A
的元素.我提供了自己的 operator<
实现对于这个类。我的问题是,如果我在这个多重集中插入两个等效对象,它们的顺序是否得到保证?例如,首先我插入一个对象 a1
到集合中,然后我插入一个等效对象 a2
进入这个集合。我可以期待 a1
来到a2
当我遍历集合时?如果没有,有没有办法使用 multiset 来实现这一点?
最佳答案
在 C++03 中,您不能保证 insert
和 erase
保留 相对顺序。然而,这在 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/