C++ 从c+中的std::map获取值+;哪个有自定义类型

C++ 从c+中的std::map获取值+;哪个有自定义类型,c++,c++11,C++,C++11,我已将映射初始化为: typedef void* ProxyClientHandler; std::map<string,ProxyClientHandler> connectedClient; 这给了我一个错误: 错误:无法将参数“1”的“std::map,void*>::iterator{aka std::_Rb_tree_iterator,void*>}”转换为参数“1”的“ProxyClientHandler{aka void*}”到“int-DHProxyClient

我已将映射初始化为:

typedef void*   ProxyClientHandler;
std::map<string,ProxyClientHandler> connectedClient;
这给了我一个错误:

错误:无法将参数“1”的“std::map,void*>::iterator{aka std::_Rb_tree_iterator,void*>}”转换为参数“1”的“ProxyClientHandler{aka void*}”到“int-DHProxyClientDelPort(ProxyClientHandler,int)”中


如何解决此问题?

find
返回迭代器

std::map<string,ProxyClientHandler>::iterator it = connectedClient.find(deviceId);
std::map::find()
返回迭代器,通常可以这样使用它:

auto it = map.find( key );
if( it == map.end() ) {
   // key not found
}
ProxyClientHandler client = it->second;

find
返回迭代器。您希望
位于
[]
。在这种情况下,使用
运算符[]
恐怕不安全或无效,或者两者兼而有之。“我不推荐。”斯拉瓦同意。
std::map::operator[]
的行为在他们设计时似乎是个好主意,但它太愿意隐藏逻辑错误了。即使您99.9%确定密钥是安全的,
myMap.at(key)
也同样简单,它将定位错误而不是隐藏它们。
std::map<string,ProxyClientHandler>::iterator it = connectedClient.find(deviceId);
ProxyClientHandler client = connectedClient[deviceId];
auto it = map.find( key );
if( it == map.end() ) {
   // key not found
}
ProxyClientHandler client = it->second;