Nav*_*een 12 c++ stl standard-library data-structures
我有一个std::multiset存储元素class A.我operator<为这个课提供了自己的实现.我的问题是,如果我在这个multiset中插入两个等效对象,他们的顺序是否有保证?例如,首先我将一个对象a1插入到集合中,然后将一个等效对象a2插入到该集合中.当我遍历集合时,我可以期待a1之前a2的结果吗?如果不是,有没有办法用multiset实现这个目的?
GMa*_*ckG 21
在C++ 03中,您无法保证insert并erase保留相对排序.但是,这在C++ 0x中已更改:
n3092,§23.2.4/ 4:关联容器支持唯一键,如果每个键最多可包含一个元素.否则,它支持等效键.set和map类支持唯一键; multiset和multimap类支持等效键.对于multiset和multimap,插入和擦除保留了等效元素的相对顺序. 强调我的.
本缺陷报告中对此进行了讨论.这个页面是关于这个问题的评论集合,它写得很好并且非常充实.(我非常推荐通过之前的"概述"链接阅读此内容.)
从该评论页面中,您将找到当前实现的比较,因此您可以检查您打算使用的实现是否遵循您的期望.
我想不出一种强制你想要的排序的方法.:/