跪求大神指点一个关于C++ STL map 查找关键字的问题

#include<map>#include<utility>#include<iostream>usingnamespacestd;intmain(){intmark=0... #include <map>
#include <utility>
#include <iostream>
using namespace std;

int main()
{
int mark=0;
char ch[10];
//使用pair实现数据插入
map<int, string> mapStudent;
mapStudent.insert(pair<int, string>(1, "张三"));
mapStudent.insert(pair<int, string>(2, "李四"));

map<int, string>::iterator iter;//定义个迭代器
cout<<"search:";
cin>>ch;//输入要查找的学生姓名
iter=mapStudent.find(1); //这种方法是按学号查找
if(iter!=mapStudent.end())
cout<<iter->second<<"的学号是:"<<iter->first<<endl;
else
cout<<"no "<<ch<<endl;

if(mapStudent.count(ch)) //这种方法是按姓名查找,问题就在这
// 提示错误
cout<<mapStudent[ch] <<endl;
return 0;
}
我想问的就是,我现在map类型是先int后string。我怎么做到,输入一个ch(学生姓名),然后找出这个学生有没有在map里,并且输出他的学号。而不是输入学号,找出这个学生。

跪求大神给我个解决方法,最后简要的和我说下原理,和我错误的原因。小弟初学者。
展开
 我来答
百度网友9308069
2012-03-15 · TA获得超过1万个赞
知道大有可为答主
回答量:3947
采纳率:89%
帮助的人:1923万
展开全部
首先,应该查找键。你写<int,string>把学号作为键,却查找的是姓名值,就浪费了这个数据结构的效率。应该<string, int> 姓名-学号对应,查姓名,直接出学号。。

#include <iostream>
#include <map>
using namespace std;
int main()
{
char ch[10];
map<string, int> m;
m.insert(pair<string,int>("张三",1));
m.insert(pair<string,int>("李四",2));
m.insert(pair<string,int>("king",3));
cout<<"search:";
cin>>ch;

map<string,int>::iterator iter;//定义个迭代器
iter=m.find(ch); //这种方法是按学号查找
if(iter!=m.end())
cout<<iter->second<<"的学号是:"<<iter->first<<endl;
else
cout<<"no "<<ch<<endl;

if(m.count(ch)) //这种方法是按姓名查找,问题就在这
// 提示错误
cout<<m[ch] <<endl;
return 0;

return 0;
}
追问
那如果我要提供两种功能,姓名查找方式和学号查找方式怎么办?
love_zhai
推荐于2016-01-11 · TA获得超过111个赞
知道小有建树答主
回答量:157
采纳率:0%
帮助的人:101万
展开全部
map是看成一种<key , value>的键值对,你可以用一个迭代器对这个map进行遍历,对每个 map 的value(也就是iter->second)与你输入的姓名比较,如果相同输出学号(iter->first)。
你错误的原因是 map 中的 count方法参数是 它的 key, 而你传的实际上是 value,类型不对,而且这个方法是计算与key相同的数量
追问
我就是不懂怎么比较value与我输入的姓名的语法.
一直提示:error C2664: 'strcmp' : cannot convert parameter 1 from 'class std::basic_string,class std::allocator >' to 'const char *'
追答
 的count()方法的参数是 map 的key, 不是value,返回的是与key相同的键值对数量,你的if(mapStudent.count(ch))是什么意思,肯定错,可以用迭代器遍历,比较每一个value与你输入的ch才行,然后输出才行的。
你的那个错误是strcmp方法传的参数不合法的问题
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式