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;
}
2条答案
按热度按时间polhcujo1#
简短的回答是:
myCompare
告诉std::sort
函数如何对整数对进行排序。p1
和p2
是要比较的整数对。想想看,如果你有两对整数,比如{10,4}和{20,2},你怎么知道如何排序呢?
myCompare
函数简单地描述了应该使用第一种比较方法,只考虑每对的第一个值。在这个例子中,
p1
是{10,4},p2
是{20,2},myCompare
会将它们排序为p1, p2
,因为10〈20。在
main()
函数中,myCompare
将被多次调用,同时std::sort
对向量进行排序,并传入当时正在比较的2个整数对(p1
和p2
)。db2dz4w82#
排序函数通常执行一系列比较,以构建给定元素的排序范围。对于比较,可以使用小于或大于运算符进行升序或降序排序。还可以定义和使用完全唯一的比较运算符来解释数据类型,只要它满足
Compare
要求。比较函数定义类型的排序。它以两个元素作为输入,并返回布尔值。比较函数
comp
必须满足一些规则才能定义有意义的排序(并且没有UB),例如:在您的示例中,使用
myCompare
函数对v
进行排序,该函数定义为类型pair<int, int>
上的比较运算符。myCompare
只考虑对中的第一个元素,这是完全有效的,并且满足Compare的所有规则。