std :: pair <int,std :: string =“”>是否定义良好定义?</int,>

时间:2010-05-12 13:35:23

标签: c++ sorting stl

似乎我可以对std::vector<std::pair<int, std::string>>进行排序,它将根据int值进行排序。这是一个定义明确的事情吗?

std::pair是否有基于其元素的默认排序?

4 个答案:

答案 0 :(得分:52)

std::pair使用词典比较:它将根据第一个元素进行比较。如果第一个元素的值相等,则它将根据第二个元素进行比较。

C ++ 03标准(第20.2.2节)中的定义是:

template <class T1, class T2>
bool operator<(const pair<T1, T2>& x, const pair<T1, T2>& y);

Returns: x.first < y.first || (!(y.first < x.first) && x.second < y.second).

答案 1 :(得分:9)

根据我的C ++ 0x标准副本,第20.3.3.26节,std::pair定义了operator<,对于两对x和y,它返回

x.first < y.first || (!(y.first < x.first) && x.second < y.second)

我不确定这是否也是2003标准的一部分。我还应该注意,如果元素本身不是LessThanComparable,则不会编译。

答案 2 :(得分:2)

Documentation from SGI

  

比较运算符。它使用词典比较:如果x的第一个元素小于y的第一个元素,则返回值为true;如果y的第一个元素小于x的第一个元素,则返回false。如果这两种情况都不是,那么运营商&lt;返回比较x和y的第二个元素的结果。仅当T1和T2都是LessThanComparable时,才可以使用此运算符。这是一个全局函数,而不是成员函数。

看起来它实际上是两个元素的组合。

答案 3 :(得分:2)

是。假设operator<()std::pair<T1, T2>本身具有可比性,T1定义为T2