在程序的一部分中,我想更新unordered_map
的给定值。可以这样简化问题:
#include <iostream>
#include <stdlib.h>
#include <unordered_map>
#include <string>
int main(int argc, char **argv) {
std::unordered_map <unsigned long, int> map;
unsigned long i = 1;
std::string s;
while (i != 0) {
std::cout << "Give me an unsigned long" << std::endl;
std::cin >> s;
i = strtoul(s.c_str(), NULL, 0);
if (map.find(i) == map.end()) map[i] = 1;
else if (map[i] < static_cast<unsigned long>(-1)) map[i] += 1;
}
}
(当然,我的程序不存储用户输入数据,仅用于说明目的。我的程序实际上将整数编码的字符串存储在4个字母的字母表中。这样做需要散列,而不需要树。)
如您所见,我需要检查密钥的存在并进行更新。由于我存储了超过10亿个整数,因此我想知道这样做的最有效方法。
我看到了this related question,但没有提到值更新。
非常感谢你们。
最佳答案
int &value = map[key];
if (value != static_cast<unsigned long>(-1)) ++value;
如果映射中不存在
key
,则value
将被值初始化为0
,因此在递增后将采用正确的1
值。关于c++ - 在读/写中使用C++ 11 unordered_map的最有效方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16056214/