我想知道如何从地图中获取特定值 它包含两个向量,使用行和列字符串。 例如,如果用户输入“R1”和“C1”,则打印字符串“1”。 在这段代码中,我使用数组下标来访问向量。 如果您能解释如何使用迭代器访问它将会很有帮助。
对不起,如果这是重复的问题。
感谢。
#include <string>
#include <iostream>
#include <vector>
#include <map>
using namespace std;
typedef pair<string, string> Pair;
typedef map<Pair, string> Map;
typedef vector<string> strVec;
int main()
{
const int COL_SIZE = 3;
const int ROW_SIZE = 3;
string row_array[ROW_SIZE] = {"R1","R2","R3" };
string col_array[COL_SIZE] = { "C1", "C2", "C3" };
strVec column;
strVec row;
for (size_t i = 0; i < COL_SIZE; ++i)
{
row.push_back(col_array[i]);
column.push_back(row_array[i]);
}
Map MyMap;
Map::iterator iterator;
string numbers[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
int numberIndex = 0;
for (int i = 0; i < ROW_SIZE; ++i)
{
for (int j = 0; j < COL_SIZE; ++j)
{
MyMap[make_pair(row[i], column[j])] = numbers[numberIndex];
cout << MyMap[make_pair(row[i], column[j])];
++numberIndex;
}
cout << endl;
}
string userInputRow;
cout << "Enter a row: " << endl;
cin >> userInputRow;
string userInputCol;
cout << "Enter a column: " << endl;
cin >> userInputCol;
}
答案 0 :(得分:0)
Map::const_iterator item_pos = MyMap.find(make_pair(userInputRow, userInputCol));
if(item_pos != MyMap.end())
cout << item_pos->second << endl;
修改强> 请修复这2行:
row.push_back(row_array[i]);
column.push_back(col_array[i]);
答案 1 :(得分:0)
你映射不是持有两个向量,它是从一对字符串映射到另一个字符串。 我想知道你使用这种结构代替向量的用例是什么?
您已经可以访问代码中的地图元素:
cout << MyMap[make_pair(row[i], column[j])];
请注意,如果条目不存在,[]运算符将插入到地图中,并不总是有意。
您可以按照与每个容器相同的方式迭代地图,并按照其键进行排序:
for(const auto &p : MyMap) {
std::cout << p.second << std::endl;
}