2010-11-12 62 views
2

目前,我有一個std::map <DWORD, DWORD>表,我正在尋找與特定範圍匹配的關鍵值。找到小於或大於容器類別範圍的值

例如:

搜索由地圖,其值的密鑰值應該是小於50 <或大於> 50從搜索到的密鑰值。

如果搜索鍵值20,那麼我會想從地圖即範圍內的鍵值

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

有(第一不到更好的方法來找到比使用兩個環路以外的其他鍵值,第二個大於)或適當的方式來存儲這些操作的表數據?

回答

5

您可以使用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

+0

據我瞭解OP他通過搜索值要鑰匙特定範圍和'map :: * _ bound'適用於不是值的鍵 – erjot 2010-11-12 12:07:11

+0

@erjot - 措詞不明確,但第一句提到「與特定範圍匹配的鍵值」。 – 2010-11-12 12:09:22

+0

和第二個'從地圖中查找哪個值應該是';)imho op應重新考慮更改他使用的數據結構 – erjot 2010-11-12 12:11:15

相關問題