在boost unordered_map对象中查找值

时间:2014-03-30 19:24:44

标签: c++11 boost

我正在尝试在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>}’

1 个答案:

答案 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;