const unordered_map < std::string, int[4] > 初始化失败 (clang 12 / c++20)

initialise failing for const unordered_map < std::string, int[4] > (clang 12 / c++20)

我想我在这里的初始化做错了什么,想知道是什么,为什么! (我不担心在这里使用 int[4] - 这是一个将由脚本生成的 const 映射)。

#include <unordered_map>
#include <string>
 
int main() {
    const std::unordered_map<std::string, int[4]>  m { 
        { "alo", {2,2,1,2} },{ "bok", {1,4,0,7} }
    };
}

编译:

g++ -std=c++20 foo.cpp

foo.cpp:5:52: error: no matching constructor for initialization of 'const std::unordered_map<std::string, int [4]>' (aka 'const unordered_map<basic_string, int [4]>')

您不能将数组用作地图的元素,也不能用作任何其他标准容器的元素。

这是因为数组不是 C++ 中的第一个 class 结构。它们不是可复制构造的,也不是可分配的,这是 std::map.

值的要求

然而,您可以将数组作为 class 的成员,这样的包装器 class 可以用作容器的元素。标准库也为这样的包装器提供了一个模板class:std::array