[英]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_bound
和map::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_bound和upper_bound的在線示例。
請注意, DWORD
是無符號的,因此在映射中使用負數可能會給您一個警告錯誤,並且-70意外大於70。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.