2014-03-30 77 views
0

我試圖找到unordered_map值如下:尋找升壓值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); 
} 

但我得到以下錯誤在find命令,如果user_map:

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*&)’ 

所以發現有什麼問題?

新編輯:

現在我的新問題,修改後這是當我使用迭代器來獲取相關列表,folllowing:

 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

在您定義的哈希表,您使用以下鍵值對:

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; 
+0

非常感謝爲了您的答案,我現在修改了新問題。你可以幫幫我嗎? – IoT

+0

新問題是什麼? – tonga

+0

對不起,我忘了提及上面的新編輯 – IoT