簡體   English   中英

C ++ STL ..定制比較器如何工作?

[英]C++ STL .. how does custom comparator work?

我不了解自定義比較器如何在C ++中工作..幕后到底發生了什么?

假設我們的比較器comp(x,y)有兩個參數xy ,我們使用此比較器函數來表示類似std::sort()的vector vector<int> v (size) std::sort()priority_queue 運行時傳遞給comp()的數組元素的順序是comp()

comp(v[0],v[1]) 
comp(v[1],v[2])

對於任何類型的自定義比較,規則是什么? 我聽說過弱訂購概念,請問有人可以清楚地解釋一下嗎?

這里

comp

二進制函數,該函數接受范圍內的兩個元素作為參數,並返回可轉換為bool的值。 返回的值指示是否按其定義的特定嚴格弱順序將作為第一個參數傳遞的元素視為在第二個參數之前。

該函數不得修改其任何參數。

這可以是一個函數指針或一個函數對象。

換句話說,如果應該在結果向量中將x放置在y之前,則comp(x,y)應該返回true。

編輯:我想我讀錯了你的問題。 矢量元素傳遞到比較器的順序取決於所使用的算法,這取決於實現,因為標准沒有指定確切的算法。 我相信快速排序是一種常見的算法。

無法保證如何使用比較函數,但是除了user9549915的答案中指出的其他屬性外,它還必須滿足嚴格的弱排序

定義嚴格弱排序的函數類似於通常的小於( < )運算符:

  1. 對於所有xx < x為假。
  2. 對於所有xy ,如果x < y為true,則y < x為false。
  3. 對於所有xyz ,如果x < yy < 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM