鑑於該代碼在Visual Studio 2010:無法提領地圖常量的mapped_type迭代
void Foo::Bar() const
{
map_t::const_iterator iter(my_map_.find(key));
if(my_map_.end() != iter)
DoStuff(iter->second);
}
做的東西會值乘mapped_type。映射類型是可複製的,可移動的,可分配的類型。
我收到錯誤消息,指出在嘗試訪問第二個時無法複製鍵/值對。即使我寫自己的臺詞:
iter->second;
(*iter).second;
,以確保它沒有任何關係DoStuff ...
我相信迭代器使得鍵/值對的一個副本返回之前,操作符 - >或運營商*。
如何獲取映射類型的副本?
編輯:
地圖本身是無符號的短褲的提高的變體,大致爲這樣:
typedef struct{} empty_t;
typedef boost::variant<empty_t, double, long, some POD types> variant_t;
typedef std::map<unsigned short, variant_t> map_t;
然後作爲類的私有成員:
map_t my_map_;
而要清楚,問題不在傳遞給DoStuff。我可以刪除該行,並簡單地取消引用迭代器,然後訪問第二個,這將導致編譯器錯誤。
if(my_map_.end() != iter)
iter->second; //Doesn't do anything, but illustrates the error.
你可以發表代碼exibits *只*這個問題? – 2012-07-26 20:49:25
如果'T = std :: map',那麼'T :: value_type'是'std :: pair '。注意常數。 –
2012-07-26 21:16:36
正確,但我不想K,我想要V. – 2012-07-26 21:23:36