我是C ++地图的新手。我想在我的程序中使用类似下面的地图。
std::map<std::pair<int,int>,string> pattern
此处,关键int,int
实际上二维网格和列的行位置和列位置最初是未知的。所以我想最初将列设置为值0.在程序过程中,它也可能是负数。那么有人可以帮助我如何访问和设置这种地图的元素吗?
答案 0 :(得分:1)
你的问题并不完全清楚。但是这个小样本演示了如何初始化其键由行列对(示例中为10行和10列)组成的映射,并且每个键的值都是“行,列”模式的值。然后,该示例迭代地图并打印出地图的每个键值对。
map<pair<int,int>,string> patterns;
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
patterns[make_pair(i, j)] = std::to_string (i) + ", " + std::to_string (j);
}
}
for (const auto &pair : patterns) {
std::cout << pair.first.first << "," << pair.first.second << ": " << pair.second << '\n';
//note pair.first in the row column pair, pair.first.first is the row, pair.first.second is the column, pair.second is the string pattern
}
答案 1 :(得分:0)
只要您在C ++ 11模式下编译(从2014年开始,您应该这样做),该对的值可以指定为 braced-init-list ,例如:在{ 4, -13 }
的大多数界面功能中map
。这不适用于emplace
或使用完美转发的任何其他内容。
例如:
patterns[{ 1, 2 }] = "hello"; // set a given element
patterns.at[{ 1, 2 }] = "Hello"; // alter a given pre-existing element
foo( patterns.at[{ 1, 2 }] ); // pass a (reference to) pre-existing element
patterns.erase({ 3 , 4 }); // ensure that given element no longer exists