[英]lower_bound and upper_bound in Map of Pairs
我試圖從這里了解 map 對中的lower_bound和upper_bound 。
定義如下:
lower_bound:在 map 中, pair(x, y)的lower_bound( ) 將返回一個迭代器,該迭代器指向第一個值大於或等於 x 且第二個值大於或等於 y 的對。 如果不滿足上述條件,則返回一個指向對{map.size(), 0}的迭代器。
upper_bound:在 map 中, pair(x, y)的upper_bound( ) 將返回一個迭代器,該迭代器指向第一個值大於 x 且第二個值大於 y 的對。 如果不滿足上述條件,則返回一個指向對{map.size(), 0}的迭代器。
現在,讓我們考慮下面的例子。
map<pair<int, int>, int> mp;
mp.insert({ { 2, 3 }, 8 });
mp.insert({ { 2, 5 }, 5 });
mp.insert({ { 7, 1 }, 3 });
mp.insert({ { 9, 3 }, 1 });
mp.insert({ { 5, 0 }, 3 });
我們有上面的 map 對。
現在,如果我想找到對{2, 4}的下限,結果是 {2, 5} 根據定義對我來說似乎很好。 定義說“ lower_bound 將返回一個迭代器,該迭代器指向第一個值大於或等於 x 且第二個值大於或等於 y 的對”。 因此,在這種情況下,2 等於 2,5 大於 4。
但是,如果我想找到對{2,2}的上限,結果是{2, 3}根據定義在我看來這是錯誤的。 定義說“ upper_bound 將返回一個迭代器,該迭代器指向第一個值大於 x 且第二個值大於 y的對”但在上述情況下,第一個值等於 x。 根據定義, {2,2}的上界應為{9, 3} ,其中 9 大於 2,3 大於 2。
我想我在這里錯過了一些東西。 任何人都可以在這里幫助我嗎?
您通過鍵值將其存儲在有序的 map 中。 地圖鍵的順序如下:
<2, 3> | <2, 5> | <5, 0> | <7, 1> | <9, 3>
因此,實際的std::map::upper_bound
參考說明如下:
iterator upper_bound( const Key& key );
返回一個迭代器,指向大於 key 的第一個元素。
由此不難看出,列表中大於<2, 2>
的第一個鍵是<2, 3>
(對於調用mp.upper_bound(std::make_pair(2, 2))
)。
根據 map 中的密鑰類型,對於 upper_bound greater
意味着更大。 在這種情況下,鍵是一對整數,並且一對整數的operator<
用於此比較。 根據該運算符的定義,如果對的第一個元素相同,則比較第二個元素,因此確實{2, 3}
大於{2, 2}
。
這是gnu 實現的鏈接以供參考。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.