Как обновить карту STL key1 с помощью key2, а также скопировать значение в key2 - PullRequest
0 голосов
/ 06 января 2019

У меня есть карта STL. Я хочу изменить один из ключей на карте. Как я могу заменить ключ1 ключом2 и затем скопировать значение в ключ2? карта [ключ2] = значение.

Спасибо

Ответы [ 3 ]

0 голосов
/ 06 января 2019

Помимо того, что вы не можете изменить ключ на карте, описанная вами операция даже не нуждается в этой операции ... Если вы говорите, что хотите переименовать key1 в key2, а затем вставьте несколько value в key2, вы можете просто удалить key1 с карты и сохранить value в слоте key2.

m.erase(key1);
m[key2] = value;
0 голосов
/ 06 января 2019

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

Таким образом, вы должны добавить новый ключ и удалить старый. Я мог бы сделать что-то вроде этого:

template<typename Key, typename Value>
void replace_key(std::map<Key, Value>& map, Key const& key1, Key const& key2)
{
    auto found = map.find(key1);

    if(found == std::end(map))
        throw std::runtime_error("No such key")

    map.emplace(key2, std::move(found->second));
    map.erase(found);
}

При перемещении значения в новую ключевую позицию это должно быть достаточно эффективным.

0 голосов
/ 06 января 2019

Вы не можете изменить ключи на карте, все, что вы можете сделать, это удалить старый ключ и добавить новый ключ со старым значением.

* 1003 Е.Г. *

auto value = m[key1];
m.erase(key1);
m[key2] = value;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...