创建一个 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));
但是没用;可能是因为数组不是动态分配的?
因为您使用的是 c++ and have access to c++11 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?
我试图创建一个地图来将二维数组与字符相关联。我试过这样做:
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));
但是没用;可能是因为数组不是动态分配的?
因为您使用的是 c++ and have access to c++11 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?