2010-01-20 39 views
3

我有一個std::map<std::string, float>所以我可以做基於名稱浮點值快速查找,但我有一個情況,現在,我需要在列表中找到的下一個浮點值,如果它被分選數字。據我所知,我不能只使用迭代器,因爲映射是關鍵排序的。所以,如果我的套裝包括:下一個值::地圖

std::pair<"One", 1.0> 
std::pair<"Two", 2.0> 
std::pair<"Three", 3.0> 
std::pair<"Four", 4.0> 
std::pair<"Five", 5.0> 

如果我想找到「三國」之後的下一個值,這將是做到這一點的最有效方法是什麼?在這種情況下的預期產出將是4.0。我可以迭代整個列表並將最大值與當前下一個值一起存儲。這是最好的方法嗎?

+0

感謝您的編輯,Prasoon。我忘了製作代碼塊代碼。 :) – 2010-01-20 17:41:27

回答

6

你可能想使用Boost::bimap,而不是一個正常的地圖 - 它很直接提供這種能力。

+1

我會,但我不能。由於許可限制,我無法將該代碼存入我的代碼庫。 – 2010-01-20 17:40:10

+0

哪些限制? Boost許可證的設計使其實際上可以包含在任何項目中,不論是商業還是非商業項目,並且可能是我所知道的最寬容的(正如BeerWare)。 – 2010-01-20 18:01:14

+0

Boost許可證是最寬鬆的許可證之一,您有什麼問題? – 2010-01-20 18:01:32

1

如果你真的不能使用Boost,那麼你可以保留一組獨立的花車在地圖旁邊的(非常小心,以保持同步)。然後你可以找到你想要的兩個查找:

set<float>::const_iterator found = set.find(map["Three"]); 
++found; 
assert(*found == 4.0); 
相關問題