[英]How does the comparator function work in Priority Queue C++ STL?
[英]C++ STL .. how does custom comparator work?
我不了解自定義比較器如何在C ++中工作..幕后到底發生了什么?
假設我們的比較器comp(x,y)
有兩個參數x
和y
,我們使用此比較器函數來表示類似std::sort()
的vector vector<int> v (size)
std::sort()
或priority_queue
。 運行時傳遞給comp()
的數組元素的順序是comp()
comp(v[0],v[1])
comp(v[1],v[2])
對於任何類型的自定義比較,規則是什么? 我聽說過弱訂購概念,請問有人可以清楚地解釋一下嗎?
無法保證如何使用比較函數,但是除了user9549915的答案中指出的其他屬性外,它還必須滿足嚴格的弱排序 。
定義嚴格弱排序的函數類似於通常的小於( <
)運算符:
x
, x < x
為假。 x
和y
,如果x < y
為true,則y < x
為false。 x
, y
和z
,如果x < y
和y < z
都為真,則x < z
必須為真。 為了便於閱讀,我使用x < y
代替comp(x, y)
。
保存可用於對矩陣進行排序的標准C庫qsort()。 顧名思義,該函數使用QuickSort算法對指定的數組進行排序。 以下是qsort()的示例
void qsort(void * base,size_t num,size_t size,int(*比較器)(const void *,const void *)); 關於qsort()的要點是比較函數比較。 比較函數采用兩個參數,並包含確定已排序輸出中其相對順序的邏輯。 這個想法是為了提供靈活性,以便qsort()可以用於任何類型(包括用戶定義的類型),並且可以用於獲取任何所需的順序(增加或減少,或其他任何方式)。 比較函數將兩個索引作為大小(都綁定到const星座*),並確定要返回的元素順序(以常數和多重方式)
內部比較(const void * p1,const void * p2); 返回值的含義<0由p1引用的項目位於p2引用的元素之前0 p1引用的元素等於p2引用的元素
0 p1引用的項目在p2引用的項目之后移動
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.