std :: sort如何确定排序依据?

问题描述 投票:0回答:3

我有以下代码

#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,这意味着排序是基于对的第一个元素进行的。

为什么会这样,而不是第二个要素的基础?从这个意义上说,排序是如何工作的?

c++ sorting std-pair
3个回答
2
投票

由于在不指定比较器的情况下使用std::sort 时,将使用std::sort比较元素。

1)使用operator<比较元素。

和重载的operator<,首先比较第一个元素,如果第一个元素相等,则比较第二个元素。

按字典顺序比较lhs和rhs,即比较第一个元素,并且仅当它们相等时才比较第二个元素。


0
投票

将其分解成各个部分很有用。

operator< for std::pair在字典上进行比较,如您所见:operator<。默认情况下,std::pair使用std::pair比较(所有类型):https://en.cppreference.com/w/cpp/utility/pair。将这两个放在一起,然后按从高到低的顺序对对进行排序。


0
投票

为什么会这样,而不是第二个要素的基础?从这个意义上说,排序是如何工作的?

因为默认情况下std::sort会先对operator<进行排序,然后对https://en.cppreference.com/w/cpp/algorithm/sort进行排序。

如果要通过第二个元素排序,则必须提供自定义比较运算符。类似于:

std::sort
© www.soinside.com 2019 - 2024. All rights reserved.