创建一个 std::map 包含二维数组?

Creating a std::map containing 2d arrays?

我试图创建一个地图来将二维数组与字符相关联。我试过这样做:

map<char, bool[6][4]> m;
bool charA[6][4] = { 0,1,1,0,
                     1,0,0,1,
                     1,1,1,1,
                     1,0,0,1,
                     1,0,0,1,
                     1,0,0,1 };

m.insert(make_pair('a', charA));

但是没用;可能是因为数组不是动态分配的?

因为您使用的是 and have access to compiler or newer versions, use std::array 而不是 c 样式数组。

在您的情况下,您可以将其替换为 std::array<std::array<bool, 4>, 6>。 现在您可以进行如下操作:See a demo

#include <array> // std::array

std::map<char, std::array<std::array<bool, 4>, 6>> m;
std::array<std::array<bool, 4>, 6> arr = { 0,1,1,0,
                       1,0,0,1,
                       1,1,1,1,
                       1,0,0,1,
                       1,0,0,1,
                       1,0,0,1 };

// now you can
m.emplace('a', arr); // construct the entry in-place (std::map::emplace)

Maybe because the array is not dynamically allocated?

这与分配无关,问题出在 c 风格的数组上。你只是 无法将其复制 到地图上。也就是说,不可复制!

更多阅读:

  • C-style array in C++ map
  • How can I use an array as map value?

未来阅读:

正如 @TedLyngmo 指出的那样,在给定的示例中,即使使用了 std::map::emplace,数组的副本(即 arr)也会发生。对于较大的数组或具有复制成本高昂的数据类型的数组,这可能会非常昂贵。在这种情况下,您需要按照链接网站中显示的方式使用 std::map::emplace

更多例子可以参考以下例子:

  • How to use emplace in map for custom class?