bool sortbysec(const pair<int,int> &a,const pair<int,int> &b)
{
return (a.second < b.second);
}
sort(vect.begin(), vect.end(), sortbysec);
vector< pair <int, int> > vect;
int arr[] = {10, 17, 5, 70 };
int arr1[] = {30, 60, 20, 50};
int n = sizeof(arr)/sizeof(arr[0]);
for (int i=0; i<n; i++)
vect.push_back( make_pair(arr[i],arr1[i]));
Run Code Online (Sandbox Code Playgroud)
return(a.second<b.second) 是什么意思?它如何按第二个元素排序?
抽象的排序序列的概念s是,对于任何一对元素s[i]和s[j],当小于时s[i],不大于。s[j]ij
对序列进行排序只是重新排列序列的元素以满足此定义。因此,为了对元素进行排序,我们需要能够询问特定值是否小于或大于其他值 - 否则我们无法确定我们对序列的排列满足“排序序列”的定义。 ”
std::sort使用比较函数来回答这个问题。默认情况下,它std::less<T>()只是使用运算符<来比较两个元素。通过将此函数应用于两个元素,它可以确定它们是否需要重新排列。看看我们对排序序列的定义,如果s[j] < s[i]何时i < j则不满足定义。交换这两个元素可以纠正该特定元素对的问题。
通过应用此比较函数以及排序算法, std::sort能够确定要排序的序列中元素应采用的顺序。这就是排序函数所做的全部工作:它将比较函数应用于元素对并重新排列它们,直到序列排序完毕。
您可以提供任何fn具有严格弱排序的比较函数,并将std::sort根据需要重新排列元素,以确保!fn(s[i], s[j])对于所有有效索引对i和jwhere都是如此i > j。这允许您操纵排序函数来获取特定的顺序。例如:
>运算符而不是<运算符进行比较的函数,则排序序列将按降序排列。struct Person { std::string name; int age; },则可以有一个仅比较年龄的函数,该函数将按年龄属性对序列进行排序。
age先比较,然后比较name年龄是否相等,则序列将按年龄排序 - 但在年龄相等的每个子序列中,该子序列按名称排序。