2013-07-06 83 views
1

我想獲取存儲在unordered_map中的unique_ptr。我使用下面的代碼:unique_ptr的unordered_map:無法從迭代器中獲取值

#include <unordered_map> 
#include <memory> 

int *function() 
{ 
    std::unordered_map< int, std::unique_ptr<int> > hash; 

    auto iterator=hash.find(5); 
    return iterator->second().get(); 
} 

當我嘗試編譯這個(GCC 4.7.2),我收到以下錯誤:

test.cpp: In function ‘int* function()’: 
test.cpp:9:29: error: no match for call to ‘(std::unique_ptr<int>)()’ 

我不明白什麼是錯的這個代碼。就好像我需要使用另一種方法從迭代器中提取引用,但我知道沒有辦法做到這一點。

Shachar

回答

1

secondstd::pair的成員變量,但您試圖將其稱爲函數。改爲使用以下內容。

return iterator->second.get(); 
+0

D'oh!謝謝。 Mia culpa。 –

2

這條線:

return iterator->second().get(); 

應該是這樣的:

return iterator->second.get(); 

second不是一個函數,而是包含在地圖中的std::pair的成員變量。您現在的代碼嘗試調用成員變量上的()運算符。但由於您的std::unique_ptr(存儲在second中)沒有定義這樣的運算符,因此編譯器無法找到它。