如何在哈希映射中访问键的值

时间:2016-05-18 15:34:47

标签: c++ hashmap

我正在尝试访问特定哈希键的值。示例代码如下。 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"],它会300 i,即Apple的密钥。如何使其工作,如hashmap[300]给“苹果”。

2 个答案:

答案 0 :(得分: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中没有任何内容。

答案 1 :(得分:0)

没有您期望的直接访问。

其中一种方法是使用 nginx: restart: always build: dockerfile: Dockerfile.dev context: ./nginx links: - client:client - api:api ports: - '8080:80'

std::find_if

此外,当您在无序映射中寻找值时,可能会有另一个键具有相似的值。

例如另一个元素//DATA std::unordered_map<std::string,int> hashmap = { {"Apple", 300}, {"Banana",60}, {"Orange",70} }; //FIND BASED ON GIVEN INPUT const auto& foundItem = std::find_if(hashmap.begin(),hashmap.end(), [](const std::pair<std::string,int>& item) { return item.second == 300; }); std::cout<<foundItem->first<<std::endl; 。如果您希望所有键的值为300。...

{"grape",300}