【发布时间】:2015-12-23 03:50:42
【问题描述】:
我正在创建一个HandleManager,其目的是简单地将Handles(这是long long int 的typedef)映射到strings。目的是让使用Handle 的对象也可以通过strings 来识别,前提是它有助于用户记住该对象。在这种情况下,在这张地图中:
typedef std::unordered_map<Handle, std::string> HandleMap;
这对中的两种类型都是键,只要它们可以用来识别任何东西。到目前为止,除了需要获取Handle 的代码之外,所有内容都已编译。目的是当用户像这样分配string 时:
handle("myHandle");
随机生成一个Handle,然后将传递的string在上述映射中与之配对。我现在想要的是能够根据传递的string 获得与string 配对的Handle:
Handle HandleManager::id(const std::string &name)
{
HandleMap::iterator it = pHandles.find(name);
if (it != pHandles.end())
return it->first;
return -1;
}
但由于某些奇怪的原因,编译器会抱怨:
HandleManager.cpp:48:45: error: no matching function for call to ‘std::unordered_map<long long int, std::basic_string<char> >::find(const string&)’
在上述映射中,string 是值,Handle 是键。那么如何根据其中包含的value从unordered_map获取key?
【问题讨论】:
-
也许你需要boost::bimap
-
唉,你得自己写这样的函数。
-
您不能使用
std::unordered_map,唯一的方法是遍历所有条目。 IIRC boost 提供了一种类型,它也允许按值查找。
标签: c++ dictionary