我想通过以下方式初始化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中的一个漂亮错误。
答案 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;
}