用map-values初始化一个映射
Initialize a map with map-values
我想用map
-values初始化map
:
std::map<int, std::map<int, int>> map =
{
{ 1, { { 1, 0 }, { 2, 1 } } },
{ 2, { { 1, 1 }, { 2, 0 } } },
};
虽然编译时没有任何错误或警告,但它会引发一个异常,指出"map/set iterators incompatible"。如果我删除第二对,即{ 2, { { 1, 1 }, { 2, 0 } } }
,则不会引发异常,并且map
包含密钥为1
的一对和包含(1, 0)
和(2, 1)
对作为其值的映射。
我相信这种(乍一看)奇怪的行为一定有很好的原因。
解决方案
不,没有很好的理由。原来这是Visual Studio 2013中一个漂亮的bug。
你试过c++11选项吗?
#include <iostream>
#include <map>
int main()
{
std::map<int, std::map<int, int>> map =
{
{ 1, { { 1, 0 }, { 2, 1 } } },
{ 2, { { 1, 1 }, { 2, 0 } } },
};
auto t = map[1];
std::cout << t[1] << std::endl;
std::cout << t[2] << std::endl;
auto t2 = map[2];
std::cout << t2[1] << std::endl;
std::cout << t2[2] << std::endl;
std::cout << "--------------" << std::endl;
std::cout << map[1][1] << std::endl;
std::cout << map[1][2] << std::endl;
std::cout << map[2][1] << std::endl;
std::cout << map[2][2] << std::endl;
}
相关文章:
- 为什么在 std::map 上移动无法将元素从一个映射移动到另一个映射
- C++在一个映射中存储不同的指针类型(并处理销毁)
- 将一个向量对放在一个无序映射与一个映射中
- 我正在尝试创建一个C++映射,该映射在boost内存映射文件中具有向量值
- 如何将键和值从映射传输到另一个映射?
- 在插入时同时迭代一个映射,这在什么方面是不安全的
- 如何制作一个C++映射容器,其中键是值的一部分
- 将一个映射插入到同一多重映射的另一个映射中会导致 SEG 错误
- 在一个映射向量上迭代,如果满足条件,则插入一个副本
- 如何将键值对引用从一个映射复制到同一类型的另一个映射
- 在C++中,如何创建一个映射,其值是protobuf扩展标识符
- C++:使用映射作为另一个映射的值
- 我可以有一个C++映射,其中多个键引用该值而不使用指针吗
- 我想开发一个函数,它接受任何类型的向量并返回一个映射(类似于 python 中的计数器)
- 如何用一对向量输出一个映射
- 如何在c++中根据另一个映射对一个映射进行排序
- 我将如何读取这个文件到一个映射c++
- 我们可以在c++中制作一个映射,将值作为键的函数
- 用map-values初始化一个映射
- 在c++中返回一个映射,用作lua中的表