看起来我可以对一个std::vector<std::pair<int, std::string>>
进行排序,它将基于int值进行排序。这样做是明确定义的吗?
std::pair
是否具有基于其元素的默认排序?
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).
std::pair
定义了一个operator<
,用于比较两个成对的值x和y,返回结果为:x.first < y.first || (!(y.first < x.first) && x.second < y.second)
我不确定这是否也是2003标准的一部分。我还应该注意,如果元素本身不可比较大小,则这将无法编译。
比较运算符。它使用词典顺序比较:如果x的第一个元素小于y的第一个元素,则返回值为true,如果y的第一个元素小于x的第一个元素,则返回值为false。如果都不是这种情况,则operator<返回比较x和y的第二个元素的结果。只有当T1和T2均可比较大小时才能使用此运算符。这是一个全局函数,不是成员函数。
看起来实际上是两个元素的组合。
T1
和T2
本身是可比较的,std::pair<T1, T2>
定义了operator<()
。
operator<
来支持排序。否则,它们需要支持更多的排序运算符,并确保它们之间的关系(例如,>=
是<
的否定)。 - interjay