我有以下代码
#include <bits/stdc++.h>
using namespace std;
int main () {
pair<int, int> p[4];
p[0] = pair<int, int>(5, 2);
p[1] = pair<int, int>(40, -2);
p[2] = pair<int, int>(-3, 2);
p[3] = pair<int, int>(4, 45);
auto print_pairii = [](pair<int, int> pp[]) {
for (int i = 0; i < 4; i++) {
cout << pp[i].first << " ";
}
cout << endl;
};
print_pairii(p);
sort(p, p + 4);
print_pairii(p);
return 0;
}
[第一个print_pairii
显示5 40 -3 4
。对对数组进行排序后,print_pairii
显示为-3 4 5 40
,这意味着排序是基于对的第一个元素进行的。
为什么会这样,而不是第二个要素的基础?从这个意义上说,排序是如何工作的?
由于在不指定比较器的情况下使用std::sort
时,将使用std::sort
比较元素。
1)使用
operator<
比较元素。
和重载的operator<
,首先比较第一个元素,如果第一个元素相等,则比较第二个元素。
按字典顺序比较lhs和rhs,即比较第一个元素,并且仅当它们相等时才比较第二个元素。
将其分解成各个部分很有用。
operator<
for std::pair
在字典上进行比较,如您所见:operator<
。默认情况下,std::pair
使用std::pair
比较(所有类型):https://en.cppreference.com/w/cpp/utility/pair。将这两个放在一起,然后按从高到低的顺序对对进行排序。
为什么会这样,而不是第二个要素的基础?从这个意义上说,排序是如何工作的?
因为默认情况下std::sort
会先对operator<
进行排序,然后对https://en.cppreference.com/w/cpp/algorithm/sort进行排序。
如果要通过第二个元素排序,则必须提供自定义比较运算符。类似于:
std::sort