使用map <pair <int,int>,string&gt;在C ++中</pair <int,int>

时间:2014-03-03 02:44:01

标签: c++

我是C ++地图的新手。我想在我的程序中使用类似下面的地图。

std::map<std::pair<int,int>,string> pattern

此处,关键int,int实际上二维网格和列的行位置和列位置最初是未知的。所以我想最初将列设置为值0.在程序过程中,它也可能是负数。那么有人可以帮助我如何访问和设置这种地图的元素吗?

2 个答案:

答案 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