myCompare 函数如何在向量对排序中工作?

How myCompare function is working in vector pair sort?

本文关键字:排序 工作 向量 函数 myCompare      更新时间:2024-09-27

myCompare 函数在向量对排序中是如何工作的? 比如什么是 P1 和什么是 P2?我想知道函数中发生了什么(比如调试)。

#include<iostream>
#include<vector>
#include<algorithm>
#include<utility>
using namespace std;
bool myCompare(pair<int, int> p1, pair<int, int> p2){
return p1.first<p2.first;
}
int main(){
int arr[]={10,16,7,14,5,3,12,9};

vector <pair <int, int>> v;
for(int i=0;i<(sizeof(arr)/sizeof(arr[0]));i++){
v.push_back(make_pair(arr[i],i));
}
for(auto a:v){
cout<<a.first<<" "<<a.second<<"    ";
}cout<<endl;
sort(v.begin(),v.end(),myCompare);
for(auto a:v){
cout<<a.first<<" "<<a.second<<"    ";
}cout<<endl;
}

简短的回答是:

  1. myCompare告诉std::sort函数如何对整数对进行排序。
  2. p1p2是要比较的整数对。

想想吧。如果你有 2 对整数,比如 {10, 4} 和 {20, 2},你怎么知道如何对它们进行排序?

  • {10, 4} 应该排在第一位,因为 10 <20?
  • {20, 2} 应该排在第一位,因为 2 <4?
  • 也许您想在比较中使用这两个值,例如 (10/4) <(20/2)?

myCompare函数只是简单地描述应该使用第一种比较方法,只考虑每对的第一个值。

因此,在此示例中,p1是 {10, 4},p2是 {20, 2},myCompare将它们排序p1, p2因为 10 <20。

在您的main()函数中,myCompare将被多次调用,同时std::sort对向量进行排序并传入当时正在比较的 2 个整数对(如p1p2)。

排序函数通常执行一系列比较以构建给定元素的排序范围。为了进行比较,您可以使用小于或大于运算符进行升序或降序排序。您还可以定义和使用完全唯一的比较运算符来解释数据类型,只要它满足Compare要求即可。

比较函数定义类型的排序。它接受两个元素作为输入,并返回一个布尔值。比较函数comp必须满足一些规则才能定义有意义的排序(并且没有 UB),例如:

For all a, comp(a,a)==false
If comp(a,b)==true then comp(b,a)==false
if comp(a,b)==true and comp(b,c)==true then comp(a,c)==true

在您的示例中,v使用定义为类型pair<int, int>上的比较运算符myCompare函数进行排序。myCompare只考虑货币对的第一个元素,这是完全有效的,并且满足比较的所有规则。