c++ - 使用 map 值初始化 map

标签 c++ visual-studio c++11 initializer-list

我想通过以下方式使用 map 值初始化一个 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 中的一个美丽错误。

最佳答案

您尝试过使用 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;
}

关于c++ - 使用 map 值初始化 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24016045/

相关文章:

c++ - libstdc++新标准库特性支持表

c++ - 无法包含 ifstream "fatal error: ' ifstream' 找不到文件”

c++ - 在函数返回值中定义新类型

c++ - 从二进制流读取时,将 double 变量的地址转换为 char* 意味着什么?

c# - 如何从字符串中去除无效字符

visual-studio-2010 - VS 可扩展性架构(包 API/Visual Studio 库)

c++ - 检查元素是否在 std::initializer_list 中

c++ - C++中复杂结构的序列化

c# - visual studio 2015 中后台编译器的行为

c++ - 如何使用 C++11 用户定义文字获取最小变量