c++ - std::unordered_map 内 std::array 的值初始化
问题描述
考虑代码:
#include <unordered_map>
#include <array>
#include <iostream>
int main () {
std::unordered_map<int, std::array<int, 5>> map;
map[42][0] = 1;
for (int i = 0; i < 5; i++) {
std::cout << map[42][i] << " ";
}
}
这打印1 0 0 0 0
在我的系统上。std::array
hold inside的内容std::map
在插入时进行了值初始化(即数组内的所有整数都设置为0)。标准能保证这一点吗?我不应该期望用作地图值的数组包含垃圾?
解决方案
value_type(key, T())
如果键不存在,运算符 [] 插入。这个函数相当于return insert(std::make_pair(key, T()))
T() 表示默认初始化
从c++17开始这个函数相当于returnthis->try_emplace(key).first->second
emplace/try_emplace 在运算符 [] 的情况下构造默认初始化值
来自https://en.cppreference.com/w/cpp/container/map/operator_at
推荐阅读
- python-3.x - Pandas 向量化条件优化
- unit-testing - 为什么 Pytest 会为每个测试方法创建一个新的类实例?
- sql - 避免在 select 子句中进行硬编码
- php - 如何突出显示使用 PHP 从 MySQL 数据库中获取的 Jquery datepicker 日期?
- python - 将多个数据框合并为一个,每个数据框作为标题名称,其中包含许多列并创建一个 3D 数据框
- raspberry-pi - 使用 ACR122U 的 libnfc 或 nfcpy 问题
- node.js - 无法使用节点/反应以正确格式获取 blob 数据
- bluetooth - Bluez 无法永久连接到蓝牙 LE 遥控器“功能未实现 (38)”
- r - 如何在 R 中创建包含条件 if 语句的垂直条形图?
- linux - Linux中目录的权限继承