2016-01-20 74 views
-2

我有一張地圖,它將多個鍵作爲鍵和字符串映射爲值。我需要一個採用給定長度的方法,在地圖中搜索並返回儘可能接近該值的鍵的值。C++地圖找到最接近的鍵

例子:

std::map<std::long,string> mymap = { 
      { 0,5, "Value1" }, 
      { 1,5, "Value2" }, 
      { 3, "Value3" } }; 

string getClosestValue(long randomnumber) { 
//dont know what to do 
    return string 
} 

當我這樣調用的方法:我想該方法返回的「值1」,即使對於「值1」關鍵是0,5 getClosestValue(0,9)。我想要「Value1」而不是「Value2」,因爲0,9比1,5更接近0.5。

這樣做的最好方法是什麼?

+2

什麼是0,5?和1,5?.. –

+2

對於這個問題,什麼是'std :: long'? –

回答

2

你或許應該這樣做:

auto it = mymap.lower_bound(key) 

使用map's lower_bound method找到key將被插入的位置。

現在你需要比較it == end(key)。如果是false,則應記錄密鑰和值,並增加it,然後再次檢查密鑰和值。將這兩個鍵的距離與key進行比較,並返回最近的值。

+0

這是正確的答案。可以補充說,如果'it == mymap.end()',你需要返回'(--it) - > second'。 –

+0

您還需要在執行比較之前遞減'it',而不是增加它。 –

1

看看庫方法std::map::lower_bound()

它並不完全符合您的要求,但它給了您非常接近您正在尋找的元素的位置。