是否保证std :: map中的元素是有序的?

时间:2010-07-28 03:18:02

标签: c++ stl

这只是一个实现副作用(红黑树)还是c ++标准保证了顺序?

4 个答案:

答案 0 :(得分:11)

有序迭代不是实现细节;它受C ++标准的保证。它是所有关联容器的基本属性(C ++03§23.1.2/ 9):

  

关联容器的迭代器的基本属性是它们以密钥的非降序迭代容器,其中非降序由用于构造它们的比较定义。对于任何两个可解除引用的迭代器ij,从ij的距离为正,

    value_comp(*j, *i) == false

value_comp是用于构建地图的比较器(默认情况下,它是std::less<T>)。

答案 1 :(得分:4)

§23.1.2/ 2:

  

每个关联容器都是   参数化Key和排序   导致严格的关系Compare   关于元素的弱排序(25.3)   Key。 ...类型Compare的对象是   称为a的比较对象   容器。这个比较对象   可能是指向函数或指针的指针   具有适当类型的对象   函数调用操作符。

默认Compare对象是小于函数std::less<Key>

排序是该功能的属性。这是一项要求,而不是副作用。

排序对象是副作用。 23.1.2 / 10和23.1.2 / 9(James引用)保证map / set和multimap / multiset分别在从beginend的序列中有增加/减少的键。

答案 2 :(得分:2)

由c ++标准保证。

答案 3 :(得分:0)

保证。如果你想要一些不受此限制的东西,请试试boost :: unordered_map&lt;&gt;