鉴于该代码在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