基本上我有(州,州代码)对,这是国家的子集 [美国] - > [VT] - > 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>'
答案 0 :(得分:6)
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!