std :: map <tstring <std :: map <tstring, unsigned int >> назначение не выполнено - PullRequest
1 голос
/ 24 апреля 2009

в основном у меня есть пары (штат, код штата), которые являются подмножествами страны [США] -> [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>'

Ответы [ 2 ]

6 голосов
/ 24 апреля 2009

operator [] на std :: map неконстантен, поскольку создает запись, если она еще не существует. Таким образом, вы не можете использовать const_iterator таким образом. Вы можете использовать find () на картах констант, но это все равно не позволит вам изменить их значения.

И Smashery прав, вы делаете первый поиск странным образом, учитывая, что у вас есть карта. Поскольку вы явно модифицируете это, что с этим не так?

countryList[_T("USA")][_T("MN")] = 5;
3 голосов
/ 24 апреля 2009

Если вы хотите найти элемент на карте, вы можете использовать метод 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!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...