std :: map <tstring <std :: map <tstring,unsigned =“”int =“”>&gt;赋值失败</tstring <std :: map <tstring,>

时间:2009-04-23 22:46:59

标签: c++ stl

基本上我有(州,州代码)对,这是国家的子集 [美国] - &gt; [VT] - &gt; 32

所以我正在使用std::map<tstring<std::map<tstring, unsigned int>>,但我在分配状态代码时遇到问题

for(std::map<tstring, std::map<tstring, unsigned int>>::const_iterator it = countrylist.begin(); it != countrylist.end(); ++it) 
{
foundCountry = !it->first.compare(_T("USA")); //find USA 
if(foundCountry) it->second[_T("MN")] = 5; //Assignment fails
}

error C2678: binary '[' : no operator found which takes a left-hand operand of type 'const std::map<_Kty,_Ty>'

2 个答案:

答案 0 :(得分:6)

std :: map上的

operator []是非const的,因为它创建了条目(如果它尚不存在)。所以你不能以这种方式使用const_iterator。你可以在const映射上使用find(),但仍然不允许你修改它们的值。

Smashery是对的,考虑到你有一张地图,你会以一种奇怪的方式进行第一次查找。既然你明确地修改了这个东西,那么这有什么问题呢?

countryList[_T("USA")][_T("MN")] = 5;

答案 1 :(得分:3)

如果您想在地图中找到元素,可以使用find方法:

std::map<tstring, std::map<tstring, unsigned int>::iterator itFind;
itFind = countrylist.find(_T("USA"));
if (itFind != countrylist.end())
{
    // Do what you want with the item you found
    it->second[_T("MN")] = 5;
}

此外,您将要使用迭代器,而不是const_iterator。如果使用const_iterator,则无法修改地图,因为:它是const!