在读/写操作中使用c++ 11 unordered_map的最有效方法

Most efficient way to use C++11 unordered_map in a read/write

本文关键字:map unordered 方法 有效 c++ 操作 在读      更新时间:2023-10-16

在程序的一部分中,我想更新给定的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亿个整数,我想知道最有效的存储方法。

我看到了这个相关的问题,但是它没有提到value update

谢谢大家。

int &value = map[key];
if (value != static_cast<unsigned long>(-1)) ++value;

如果key不在映射中,则value将被值初始化为0,因此在增量后将取1的正确值。