簡體   English   中英

查找小於或大於容器類的范圍值

[英]Finding a value of range less than or greater than from container class

目前,我有一個std::map <DWORD, DWORD>表,並且正在尋找與特定范圍匹配的鍵值。

例如:

從映射中查找一個鍵值,該鍵值的值應小於搜索到的鍵值的<50或大於> 50。

如果搜索的鍵值為20,那么我想要一個鍵范圍為map的鍵值,即

-70.............20............+70

除了使用兩個循環(第一個小於小於,第二個大於大於)以外,是否還有更好的方法來查找鍵值?或者為這種操作存儲表數據的適當方法?

如果您知道前端的中間值,則可以使用map::lower_boundmap::upper_bound來實現。

map<int, MyClass>::const_iterator lower = 
    myMap.lower_bound(-30);   // or -70 if you prefer
map<int, MyClass>::const_iterator upper = myMap.lower_bound(70);

在取消引用之前,需要檢查兩個迭代器的myMap.end()

此代碼段依賴於您的排序是通常的升序-自定義排序可能會與此相反,以便-ve數字出現在+ ve之后。 沒有更好的方法可以執行此操作-通過將map構造為二叉樹,這將非常有效。

另請參見lower_boundupper_bound的在線示例。

請注意, DWORD是無符號的,因此在映射中使用負數可能會給您一個警告錯誤,並且-70意外大於70。

暫無
暫無

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

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