簡體   English   中英

map :: lower_bound()和map :: upper_bound在C ++中如何工作?

[英]How do map::lower_bound() and map::upper_bound work in C++?

我試圖使自己熟悉C ++中的映射,並且還試圖了解可以在其上使用的一些基本操作。 但是,我唯一不了解的兩個是lower_bound()upper_bound() 我已經多次查詢了他們,但不知道他們在做什么。 有人可以澄清一下嗎?

下限和上限可能更容易理解為equal_range

equal_range返回一對迭代器,當將其視為半開間隔時,它們是與傳入鍵等效的值(在<之下)。

一旦你掌握, lower_bound返回的第一個“開始”迭代器equal_rangeupper_bound返回最后“一個過去的結束”結尾的迭代器equal_range

直接指定它們會導致您的笨拙閱讀:“第一個元素不少於”等。在他們的右腦中,沒有人以這種方式思考它們,除非在狹窄的情況下。

要了解lower_bound / upper_bound您必須記住, map不僅是將鍵映射到值的容器,而且像現實世界中的詞匯表一樣,它還強制元素按鍵排序,因此您不僅會感興趣查找特定項目,但快速找到可能實際上不存在的某些鍵的“周圍環境”。

假設您有一個map<string, T> ,它將字典單詞映射到其他內容。 如果您想進行前綴匹配(例如,所有以“ dange”開頭的單詞),請使用lower_bound ,這將為您返回大於或等於給定值的第一項; 從字典上比較,所有以該前綴開頭的單詞都將滿足此條件(因此,您可能會得到一個指向“危險”的迭代器)。 現在,只要前綴匹配(“ danger”,“ dangerous”,...),您就可以向前迭代。

另一個示例:您有一個從時間戳到事件的映射,並且您想查找兩個時間戳之間發生的情況。 您可以使用lower_bound來定位第一個>=大於初始時間戳的元素,即使該時間戳實際上並不與任何存儲的事件相對應(因此find也不行),然后只要您在范圍內,就可以繼續前進您的興趣。

使用upper_bound可以完成類似的示例-盡管老實說我認為我很少使用它。

暫無
暫無

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

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