使用map-values初始化地图

时间:2014-06-03 13:07:36

标签: 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中的一个漂亮错误。

1 个答案:

答案 0 :(得分:0)

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