簡體   English   中英

自定義比較器是如何工作的

[英]how does custom comparator works exactly

鑒於std::map< int, int, std::greater<int> > m;

默認情況下,插入到地圖的項目按升序排序。 根據上面的定義,我明白我們可以將排序順序更改為降序。

我想知道自定義比較器的工作原理。 例如,什么時候會檢查這個參數,或者這個參數在地圖實現中的確切位置?

map相關聯。 因此,它由/值對組成。 為了插入地圖中的一個新的一對或發現一個現有的,該程序必須能夠比較來自與存在於地圖中的密鑰s的請求的密鑰 為此,使用比較器。 stl 為您提供了一些標准比較器,例如lessgreaterless_equalsgreater_equal 它們為 'map' 提供了一個通用接口,以便在對上使用和執行<><=>=操作。 因此,在“映射”操作期間,比較器的operator()將使用 2 個鍵調用以進行比較。

默認比較器是“少”。 因此,在您的情況下,如果第一個int key小於第二個int key ,則比較器將返回 true 。 這將保證映射中對的特定插入順序。 如果您明確使用 'greater' 比較器,則在上述情況下它將返回 'false',並且會更改元素插入的順序。

您還可以考慮排序列表或數組,其中每個前一個元素都less第二個元素。 如果您將用於排序的 comarator 更改為greater則排序的數組將被反轉。

您也可以創建自定義比較器並執行一些不同類型的比較操作。

一般而言,可能需要自定義比較簡單的類型,如int,字符*,......如果你使用一個對象作為“鑰匙”元素,你可以重載operator< ,如果less比較正在使用中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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