Как изменить значение в неупорядоченной карте? - PullRequest
1 голос
/ 28 марта 2012

Я хотел бы попробовать вставить элемент в карту с ключом k и значением v. Если ключ уже существует, я хочу увеличить значение этого ключа.

Пример,

typedef std::unordered_map<std::string,int> MYMAP;

MYMAP mymap;
std::pair<MYMAP::iterator, bool> pa=  
    mymap.insert(MYMAP::value_type("a", 1));
if (!pa.second)
{
    pa.first->second++;
} 

Это не работает.Как я могу это сделать?

Ответы [ 2 ]

3 голосов
/ 28 марта 2012

Вам не нужны итераторы для достижения этой цели. Поскольку ваш v равен V() + 1, вы можете просто увеличить его, не узнавая, присутствовал ли ключ на карте.

mymap["a"]++;

Это подойдет для вашего примера.

1 голос
/ 06 марта 2018

unordered_map:

Какой-то красивый код (имена переменных упрощены):
Отсюда http://en.cppreference.com/w/cpp/container/unordered_map/operator_at

std::unordered_map<char, int> mu1 {{'a', 27}, {'b', 3}, {'c', 1}}; 
mu1['b'] = 42;  // update an existing value
mu1['x'] = 9;   // insert a new value
for (const auto &pair: mu1) {
    std::cout << pair.first << ": " << pair.second << '\n';
}

// count the number of occurrences of each word
std::unordered_map<std::string, int> mu2;
for (const auto &w : { "this", "sentence", "is", "not", "a", "sentence", "this", "sentence", "is", "a", "hoax"}) {
    ++mu2[w];   // the first call to operator[] initialized the counter with zero
}
for (const auto &pair: mu2) {
    std::cout << pair.second << " occurrences of word '" << pair.first << "'\n";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...