c ++ set ordered iterating - 迭代结果集,按标准排序吗?

Grz*_*cki 2 c++ stl

我可以依靠这个假设(换句话说:它是否由标准保证?):

  • set<T>::begin() 会指向集合中的最小元素吗?
  • 迭代集合,(从set<T>::begin()直到set<T>::end())将按顺序递增元素?
  • 并且只是为了确定:这些属性是否适用于密钥map

我的意思是setmapSTL.

PS我知道邻接operator<()并定义自己的比较器.请确保标准说明了什么?

Cat*_*lus 6

顺序取决于比较使用的仿函数(地图上的第三个模板参数,第二个集合).默认值是std::less<T>,它为集合/映射提供升序,是.


jua*_*nza 5

是的,您可以依赖于定义,具体取决于元素的(键)bool operator<或作为模板参数传递给集合(映射)的比较函子.因此,根据所使用的比较器,排序将从最小到最大.

在C++ 11标准§23.2.4中,处理关联容器的要求:

每个关联容器都在Key上进行参数化和一个排序关系比较,它对Key的元素产生严格的弱排序(25.4).此外,map和multimap将任意类型T与Key相关联.Compare类型的对象称为容器的比较对象.

然后,在同一部分:

关联容器的迭代器的基本属性是它们以密钥的非降序顺序遍历容器,其中非降序由用于构造它们的比较定义.对于任何两个可解除引用的迭代器i和j,使得从i到j的距离为正,value_comp(*j,*i)== false

value_comp比较函数在哪里.