关于stl::map
现需要存放一组学生信息包括,学号,姓名,性别,3课成绩。
#pragma warning (disable : 4786)
#include <map>
#include <iostream>
#include <string>
using namespace std;
template<typename T>
void show(T it,T ib)
{
while(it!=ib)
cout<<it++ ->first<<" "<<it->second<<endl;
}
int main()
{
map<unsigned,string> mapstudent;
unsigned ID;
cout<<"Please enter the student id,name,sex,age:";
for (int i=0;i<3;i++)
{
cin>>ID;
cin>>mapstudent[ID];
}
//map<int,string>::iterator it;
show(mapstudent.begin(),mapstudent.end());
return 0;
}
因为才学,上面有很多不足的地方,比如ID以后的信息必须一次输入完而且不能有空格,能不能说实现name,sex,age输入前单独出现提示呢?然后输出的时候能够对号入座呢,eg:输入请输入ID :354556请输入ID: 张山 等等,然后输出是
ID:354556
NAME:张山
SEX: 男
请大侠们指点
[解决办法]
当然可以了,std::map::find
[解决办法]
// linker.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>#include <map>#include <string>using namespace std;struct Lesson{ double dbChinese; double dbMath; double dbEnglish;};struct StudentInfo { string strStudentID; string strStudentName; bool bSex; Lesson lesson;};typedef map<string,StudentInfo> MapStudentInfo;MapStudentInfo mapStudentInfo;void AddStudent(StudentInfo* pInfo);void DelStudent(string strStudentID);void ShowInfo(MapStudentInfo& info);StudentInfo* FindStudent(string strStudentID);int _tmain(int argc, _TCHAR* argv[]){ StudentInfo info; //cin AddStudent(&info); DelStudent("12345"); StudentInfo* pInfo=FindStudent("12345"); if (pInfo!=NULL) { //do something } return 0;}void AddStudent( StudentInfo* pInfo ){ if (pInfo) { mapStudentInfo.insert(MapStudentInfo::value_type(pInfo->strStudentName,*pInfo)); }}void DelStudent( string strStudentID ){ MapStudentInfo::iterator it=mapStudentInfo.find(strStudentID); if (it!=mapStudentInfo.end()) { mapStudentInfo.erase(it); }}void ShowInfo( MapStudentInfo& info ){ for (MapStudentInfo::iterator it=info.begin();it!=info.end();it++) { cout<<"学号:"<<it->first<<endl; cout<<"姓名:"<<it->second.strStudentName; cout<<"性别:"<<(it->second.bSex?"男":"女")<<endl; cout<<"数学:"<<it->second.lesson.dbMath<<"\t语文:"<<it->second.lesson.dbChinese<<"\t英语:"<<it->second.lesson.dbEnglish<<endl<<endl; }}StudentInfo* FindStudent( string strStudentID ){ MapStudentInfo::iterator it=mapStudentInfo.find(strStudentID); if (it!=mapStudentInfo.end()) { return &(it->second); } return NULL;}