myCompare 函数如何在向量对排序中工作?
How myCompare function is working in vector pair sort?
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;
}
简短的回答是:
myCompare
告诉std::sort
函数如何对整数对进行排序。p1
和p2
是要比较的整数对。
想想吧。如果你有 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 个整数对(如p1
和p2
)。
排序函数通常执行一系列比较以构建给定元素的排序范围。为了进行比较,您可以使用小于或大于运算符进行升序或降序排序。您还可以定义和使用完全唯一的比较运算符来解释数据类型,只要它满足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
只考虑货币对的第一个元素,这是完全有效的,并且满足比较的所有规则。
相关文章:
- 为什么指针在对二维数组进行排序时无法正常工作?
- 排序功能在C++中未按预期工作
- 解释一下这个排序算法是如何工作的?
- 快速排序函数在快速排序算法中如何工作?
- 解释标准库排序函数C++的比较谓词的工作原理?
- 排序函数如何在整数对的向量上工作?
- 合并排序实施无法正常工作
- 运算符重载在 CPP 中的排序中如何工作?
- 快速排序动态大量对象无法正常工作
- 当输入向量称为储备金时,STD ::排序无法正常工作
- 排序功能无法正常工作
- std::sort与不严格的弱排序比较器可以作为拓扑排序工作
- 实现快速排序,几乎可以工作但不能
- 排序向量<变体<...>>无法通过运算符正常工作<
- 排序函数的第三个参数如何工作
- 合并排序无法在N logN中工作
- 快速排序程序停止工作
- 气泡排序:为什么它不能正常工作?
- 这种珠子排序算法的 c++ 实现是如何工作的
- 在 C++ 中工作排序函数