2016-05-18 9 views
0

特定のハッシュキーの値にアクセスしようとしています。サンプルコードは以下のとおりです。 Test Hereハッシュマップのキーの値にアクセスする方法

// unordered_map::at 
#include <iostream> 
#include <string> 
#include <unordered_map> 

int main() 
{ 
    std::unordered_map<std::string,int> hashmap = { 
       { "Apple", 300}, 
       { "Banana", 60}, 
       { "Orange", 70 } }; 

    std::cout << "Value :" << hashmap[300]<<std::endl; 

    return 0; 
} 

しかし、私は特定の値のキーにアクセスしようとすると、それはhashmap["Apple"]のように、正常に動作し、それはAppleの鍵をE、300 iを与えます。そうでなければhashmap[300]のように動作させて "Apple"を与える方法。

+1

関連するかもしれません:http://stackoverflow.com/questions/535317/checking-value-exist-in-a-stdmap-c – NathanOliver

答えて

2

hashmap[300]のように動作させる方法は、"Apple"となります。

ハッシュマップは一方向です。key --> valueです。両方向を高速にする必要がある場合は、別のデータ構造(Boost.Bimapなど)が必要です。

あなただけの時間を仕事にその検索をしたいとあなただけstd::find_ifを使用することができるよりも、線形パフォーマンスで大丈夫です場合:

auto it = std::find_if(hashmap.begin(), hashmap.end(), 
    [](auto const& pr){ return pr.second == 300; }); 
if (it != hashmap.end()) { 
    std::cout << "Key for 300: " << it->first; 
} 

値を調べるに基づくstd::unordered_mapでは何もありません。

+0

Thanks、 'Boost.Bimap'は' std :: unordered_map'として高速ですか? –

+0

@AaghazHussainそれはおそらくできません。 – Barry

+0

これは恐らく*かなり*高速ではありませんが、おそらくO(n)ではなくO(1)ではないでしょう。 –

関連する問題