首页 > 解决方案 > 如何在地图c ++中查找和打印对键

问题描述

我试图创建一个接收两个字符串并找到两者之间的编辑距离的函数。现在我正在设置一个包含键盘上几乎所有键的映射,以及一个给出该键坐标的对,EX:q = (1,0)。现在我试图弄清楚如何在我的地图中找到一个特定的键,并打印它的坐标。我的最后一行代码没有让我配对,正确的语法是什么?

map<char, pair<int,int>> mapsetup(){
map<char, pair<int, int>> keyMap = {
        {'1',make_pair(0,0)},{'2',make_pair(0,1)},{'3',make_pair(0,2)},{'4',make_pair(0,3)},{'5',make_pair(0,4)},{'6',make_pair(0,5)},{'7',make_pair(0,6)},
        {'8',make_pair(0,7)},{'9',make_pair(0,8)},{'0',make_pair(0,9)},{'q',make_pair(1,0)},{'w',make_pair(1,1)},{'e',make_pair(1,2)},{'r',make_pair(1,3)},
        {'t',make_pair(1,4)},{'y',make_pair(1,5)},{'u',make_pair(1,6)},{'i',make_pair(1,7)},{'o',make_pair(1,8)},{'p',make_pair(1,9)},{'a',make_pair(2,0)},
        {'s',make_pair(2,1)},{'d',make_pair(2,2)},{'f',make_pair(2,3)},{'g',make_pair(2,4)},{'h',make_pair(2,5)},{'j',make_pair(2,6)},{'k',make_pair(2,7)},
        {'l',make_pair(2,8)},{';',make_pair(2,9)},{'z',make_pair(3,0)},{'x',make_pair(3,1)},{'c',make_pair(3,2)},{'v',make_pair(3,3)},{'b',make_pair(3,4)},
        {'n',make_pair(3,5)},{'m',make_pair(3,6)},{',',make_pair(3,7)},{'.',make_pair(3,8)},{'/',make_pair(3,9)}
    };
    return keyMap;
}

int main(){
map<char, pair<int,int>> mapt = mapsetup();
string target, typo;

cout << "Enter target string" << endl;
getline(cin, target);
cout << "Enter typo string" << endl;
getline(cin, typo);

cout << mapt.find('a')->second << endl;

}

标签: c++dictionarystd-pair

解决方案


在这条线上:

cout << mapt.find('a')->second << endl;

您正在尝试打印pair<int,int>. 但是operator<<对于cout不知道如何处理一对。

相反,您可以这样做:

auto i = mapt.find('a'); 
cout << i->second.first << " " << i->second.second << endl;

这是一个演示

或者,当给定一对时,您可以重载operator<<to 做正确的事情:

ostream& operator<<(ostream &out, const pair<int, int> &p) { 
    return out << p.first << " " << p.second; 
}

现在您可以使用原始语法:

cout << mapt.find('a')->second << endl;

这是一个演示


推荐阅读