簡體   English   中英

對的 Map 中的 lower_bound 和 upper_bound

[英]lower_bound and upper_bound in Map of Pairs

我試圖從這里了解 map 對中的lower_boundupper_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.

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