似乎我可以对std::vector<std::pair<int, std::string>>
进行排序,它将根据int值进行排序。这是一个定义明确的事情吗?
std::pair
是否有基于其元素的默认排序?
答案 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)
比较运算符。它使用词典比较:如果x的第一个元素小于y的第一个元素,则返回值为true;如果y的第一个元素小于x的第一个元素,则返回false。如果这两种情况都不是,那么运营商&lt;返回比较x和y的第二个元素的结果。仅当T1和T2都是LessThanComparable时,才可以使用此运算符。这是一个全局函数,而不是成员函数。
看起来它实际上是两个元素的组合。
答案 3 :(得分:2)
是。假设operator<()
和std::pair<T1, T2>
本身具有可比性,T1
定义为T2
。