首页 > 解决方案 > 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::arrayhold inside的内容std::map在插入时进行了值初始化(即数组内的所有整数都设置为0)。标准能保证这一点吗?我不应该期望用作地图值的数组包含垃圾?

标签: c++initialization

解决方案


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


推荐阅读