在读/写操作中使用c++ 11 unordered_map的最有效方法
Most efficient way to use C++11 unordered_map in a read/write
在程序的一部分中,我想更新给定的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
的正确值。
相关文章:
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 使用一个考虑到std::map中键值的滚动或换行的键
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 允许从 std::map 的密钥窃取资源?
- 有没有办法对std::unordered_set、std::unrdered_map、std::set、std::map
- 将重物插入std::map
- 使用通用值初始化 std::map,不重复
- 仅包含可移动 std::map 的类的移动构造函数不起作用
- C++:当所有条目都保证是唯一时,替代 std::map
- 使用模板化的键类型定义 std::map,该键类型基于作为参数接收的函数
- 如果 KEY 是 std::list 或 std::vector 而不是值,那么 std::map 的默认行为是什么?
- 使用字符数组作为 Map 中的键
- C++如何创建 std::map
- C++ equivalent to Java Map getOrDefault?
- 从其他容器中移动构造"std::map"
- 如何使用 uint64_t 键类型从 std::map<int, std::string> 返回值?
- 将 std::map::emplace 与返回 shared_ptr 的函数一起使用是否正确?
- C++中 std::map 的运行时复杂度是多少?
- unordered map -在c++ std::unordered_map中预分配桶