如何在地图中使用C ++中的行和列获取元素的值?

时间:2014-04-25 21:48:59

标签: c++ map iterator

我想知道如何从地图中获取特定值 它包含两个向量,使用行和列字符串。 例如,如果用户输入“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;

}

2 个答案:

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