使用地图<;配对<;int,int>;,字符串>;在C++; 我是C++的新手。我想在我的程序中使用类似以下内容的映射 std::map<std::pair<int,int>,string> pattern std::映射模式

使用地图<;配对<;int,int>;,字符串>;在C++; 我是C++的新手。我想在我的程序中使用类似以下内容的映射 std::map<std::pair<int,int>,string> pattern std::映射模式,c++,C++,这里的键int,int实际上二维网格和列的行位置和列位置最初是未知的。因此,我想将列的初始值设置为0。在节目过程中,它也可能是负面的。那么,有谁能帮助我如何访问和设置此类地图的元素吗?您的问题并不完全清楚。但这个小示例演示了如何初始化其键由行-列对(示例中为10行和10列)组成的映射,并且每个键的值都是“row,column”模式。然后,示例迭代映射并打印出映射的每个键值对 map<pair<int,int>,string> patterns; for (int i =

这里的键
int,int
实际上二维网格和列的行位置和列位置最初是未知的。因此,我想将列的初始值设置为0。在节目过程中,它也可能是负面的。那么,有谁能帮助我如何访问和设置此类地图的元素吗?

您的问题并不完全清楚。但这个小示例演示了如何初始化其键由行-列对(示例中为10行和10列)组成的映射,并且每个键的值都是“row,column”模式。然后,示例迭代映射并打印出映射的每个键值对

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
} 
map模式;
对于(int i=0;i<10;i++){
对于(int j=0;j<10;j++){
模式[make_pair(i,j)]=std::to_string(i)+“,“+std::to_string(j);
}
}
用于(常数自动和配对:模式){

std::cout只要在C++11模式下编译(从2014年开始,您应该这样做),就可以将对的值指定为带括号的init列表,例如
{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

你的意思是
std::map pattern
?你到底有什么问题?关于设置/检索元素,
map
类的文档非常清晰简洁。你是否尝试使用
std::map::iterator
?使用
std::make_pair
生成一对。或者你可以使用大括号初始化。
pattern.get({1,2})
模式。获取(生成配对(1,2))
如果这是您的问题。谢谢,我以前从未使用过配对。