从具有自定义类型的c ++中的std :: map获取值

时间:2015-03-31 15:53:40

标签: c++ c++11

我已将地图初始化为:

typedef void*   ProxyClientHandler;
std::map<string,ProxyClientHandler> connectedClient;

我正在将值插入此地图

ProxyClientHandler client;
string device;
connectedClient.insert ( std::pair<string,ProxyClientHandler>(device,client) );

没有错误返回到此。

但是当我要访问给定相关键的值

string deviceId; 
ProxyClientHandler client = connectedClient.find(deviceId);

它给了我一个错误:

  

错误:无法转换'std :: map,void *&gt; :: iterator {aka std :: _ Rb_tree_iterator,void *&gt; &gt;}'到'ProxyClientHandler {aka void *}'用于参数'1'到'int DHProxyClientDelPort(ProxyClientHandler,int)'

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:5)

std::map::find()返回迭代器,通常你可以这样使用它:

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

答案 1 :(得分:0)

find返回一个迭代器。

std::map<string,ProxyClientHandler>::iterator it = connectedClient.find(deviceId);

或者,如果您验证(或仅通过代码的逻辑知道)具有密钥deviceId的元素位于map内,则应使用[]

ProxyClientHandler client = connectedClient[deviceId];