c++ myCompare函数在向量对排序中是如何工作的?

9nvpjoqh  于 2023-02-14  发布在  其他
关注(0)|答案(2)|浏览(175)

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;
}
polhcujo

polhcujo1#

简短的回答是:

  1. myCompare告诉std::sort函数如何对整数对进行排序。
  2. p1p2是要比较的整数对。
    想想看,如果你有两对整数,比如{10,4}和{20,2},你怎么知道如何排序呢?
  • 因为10〈20,{10,4}应该放在第一位吗?
  • 因为2〈4,{20,2}应该先出现吗?
  • 也许您想在比较中使用这两个值,例如(10/4)〈(20/2)?

myCompare函数简单地描述了应该使用第一种比较方法,只考虑每对的第一个值。
在这个例子中,p1是{10,4},p2是{20,2},myCompare会将它们排序为p1, p2,因为10〈20。
main()函数中,myCompare将被多次调用,同时std::sort对向量进行排序,并传入当时正在比较的2个整数对(p1p2)。

db2dz4w8

db2dz4w82#

排序函数通常执行一系列比较,以构建给定元素的排序范围。对于比较,可以使用小于或大于运算符进行升序或降序排序。还可以定义和使用完全唯一的比较运算符来解释数据类型,只要它满足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

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

相关问题