Структурированные привязки на карте строки к строке не работают - PullRequest
0 голосов
/ 06 апреля 2020

Это мой код:

std::map<std::string, std::string> map = {{"a","b"},{"c","d"}};
for(auto& [key,value] : map) {
    key = std::string("c");
    value = std::string("c");
}

, и когда я его компилирую, я получаю

error: no viable overloaded '='

что я делаю неправильно? Разве key и value не должны ссылаться на string?

1 Ответ

1 голос
/ 06 апреля 2020

Значение ключа в std::map является константой. Поскольку порядок сортировки карты зависит от значения ключа, если вы измените ключ, вы, вероятно, нарушите этот порядок и получите узел в неправильном месте.

В вашем коде key будет будет const string &, а value будет string & (так что вы можете изменить значение).

Если вам нужно изменить ключ для записи на карте, вам нужно извлечь значение из карты, удалите исходное значение, затем заново вставьте значение, используя новый ключ.

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