无需默认构造函数即可插入或更新 unordered_map

Insert or update into an unordered_map without requiring a default constructor

我有一个 std::unordered_map,我想向其中添加一个键值对。如果该密钥尚不存在,那么我希望它添加给定的值。如果密钥已经存在,那么我希望更新值。

这里的标准建议似乎是使用 operator[]。但这要求映射的值类型是可默认构造的。我希望避免提供默认构造函数。我该怎么办?

你应该使用 insert_or_assign (C++17)

cppreference 所示,在这种情况下您不需要具有默认的可构造对象:

insert_or_assign returns more information than operator[] and does not require default-constructibility of the mapped type.