我正在尝试在unordered_map中找到一个值,如下所示:
#include <boost/unordered/unordered_map.hpp>
#include <iostream>
#include <list>
using namespace boost::asio::ip;
using namespace std;
typedef int ApplicationID;
typedef address IPAddress;
typedef list <ApplicationID> APP_LIST;
typedef boost::unordered::unordered_map <IPAddress, APP_LIST> USER_MAP;
USER_MAP user_map;
void function_name()
{
std::pair<IPAddress*, std::size_t> user_ip = managed_shm->find<IPAddress>("USER-IP");
USER_MAP::const_iterator got = user_map.find(user_ip.first);
}
但是如果user_map:
,我在find命令中会出现以下错误ipc_module.cpp:147:75: error: no matching function for call to ‘boost::unordered::unordered_map<boost::asio::ip::address, std::list<int> >::find(boost::asio::ip::address*&)’
那么问题在于什么?
新编辑:
现在我遇到了新问题,经过修改后,我使用迭代器获取相关列表如下:
USER_MAP::iterator got = user_map.find(*user_ip);
if (got == user_map.end())
{}
else
{
APP_LIST list = (APP_LIST) got->second;
list->push_front(*app_id);
}
但是我收到以下错误:
ipc_module.cpp:162:25: error: base operand of ‘->’ has non-pointer type ‘APP_LIST {aka std::list<int>}’
答案 0 :(得分:1)
在定义的哈希映射中,使用以下键值对:
unordered_map <IPAddress, APP_LIST> USER_MAP;
表示此哈希映射的密钥类型为IPAddress
。但是当你使用find()
的成员函数时,提供的参数是user_ip.first
,根据你的定义,你定义的类型为IPAddress*
std::pair<IPAddress*, std::size_t> user_ip
因此,编译器报告错误,因为它期望boost::asio::ip::address*&
作为输入参数。从boost documentation开始,find()
方法具有以下签名:
const_iterator find(key_type const&) const;
因此,要更正它,您可以定义货币对user_ip
,使第一个项目为IPAddress
类型:
std::pair<IPAddress, std::size_t> user_ip;