![](/img/trans.png)
[英]How does the comparator function work in Priority Queue C++ STL?
[英]How does comparator function of c++ STL sort work?
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]));
return(a.second<b.second) 是什么意思? 它是如何按第二個元素排序的?
抽象的有序序列s
的概念是,對於任何一對元素s[i]
和s[j]
,當i
小於j
時, s[i]
不大於s[j]
。
對序列進行排序只是重新排列序列的元素以滿足該定義。 因此,為了對元素進行排序,我們需要能夠詢問某個特定值是否小於或大於某個其他值——否則我們無法確定我們對序列的排列是否滿足“排序序列”的定義。 "
std::sort
采用比較 function作為回答這個問題的方法。 默認情況下,它是std::less<T>()
,它只是使用運算符<
來比較兩個元素。 通過將此 function 應用於兩個元素,它可以確定它們是否需要重新排列。 查看我們對排序序列的定義,如果當i < j
時s[j] < s[i]
則不滿足定義。 交換這兩個元素可以糾正該特定元素對的問題。
通過應用這種比較 function 以及排序算法, std::sort
能夠確定要排序的序列中元素的順序。 這就是 function 所做的所有排序:它將這種比較 function 應用於元素對並重新排列它們,直到對序列進行排序。
您可以提供任何具有嚴格弱排序的比較 function fn
並且std::sort
將根據需要重新排列元素以確保,fn(s[i], s[j])
對於所有有效索引對i
和j
都為真,其中i > j
。 這允許您操作排序 function 以獲得特定訂單。 例如:
>
運算符而不是<
運算符進行比較的 function,則排序序列將按降序排列。struct Person { std::string name; int age; }
struct Person { std::string name; int age; }
struct Person { std::string name; int age; }
值,你可以有一個 function 只比較年齡,這將按年齡屬性對序列進行排序。
age
,然后在年齡相等時比較name
,則序列將按年齡排序——但在每個年齡相等的子序列中,該子序列按姓名排序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.