版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zh1204190329/article/details/81673745
map学习
最近做题的时候对多关键字排序的处理上存在问题。发现map容器对排序有较好作用,学习一下。
参考代码
#include <iostream>
#include <algorithm>
#include <vector>
#include <map>
using namespace std;
typedef struct tagstuinfo {
int id;
string name;
bool operator <(tagstuinfo const &_a) const {
if (id < _a.id)
return true;
if (id == _a.id)
return name.compare(_a.name) < 0;
return false;
}
} stuinfo, *pstuinfo;
int main()
{
map<int, string> mapStudent;
map<int, string>::iterator iter;
pair<map<int, string>::iterator, bool> Insert_Pair;
// mapStudent.insert(pair<int, string>(1, "student1"));
// mapStudent.insert(pair<int, string>(2, "student2"));
// mapStudent.insert(pair<int, string>(3, "student3"));
mapStudent[1] = "student1";
mapStudent[2] = "stu2";
mapStudent[3] = "stu3";
mapStudent.insert(map<int, string>::value_type(4, "student1"));
mapStudent.insert(map<int, string>::value_type(6, "student2"));
mapStudent.insert(map<int, string>::value_type(5, "student3"));
Insert_Pair = mapStudent.insert(pair<int, string>(7, "stu7"));
if (Insert_Pair.second == true)
cout << "Inser success" << endl;
else
cout << "Insert failed" << endl;
Insert_Pair = mapStudent.insert(pair<int, string>(7, "stu8"));
if (Insert_Pair.second == true)
cout << "Inser success" << endl;
else
cout << "Insert failed" << endl;
for (iter = mapStudent.begin(); iter != mapStudent.end(); iter++)
cout << iter->first << " " << iter->second << endl;
cout << mapStudent.size() << endl;
map<int, string>::reverse_iterator iter2;
for (iter2 = mapStudent.rbegin(); iter2 != mapStudent.rend(); iter2++)
cout << iter2->first << " " << iter2->second << endl;
iter = mapStudent.find(1);
if (iter != mapStudent.end())
cout << "Find, the value is " << iter->second << endl;
else
cout << "Do not find " << endl;
map<stuinfo, int> mapstu;
map<stuinfo, int>::iterator iter3;
// map<Studentinfo, int>::iterator iter;
stuinfo stu;
stu.id = 1;
stu.name = "zhang";
mapstu.insert(pair<stuinfo, int>(stu, 90));
stu.id = 2;
stu.name = "hao";
mapstu.insert(pair<stuinfo, int>(stu, 80));
for (iter3 = mapstu.begin(); iter3 != mapstu.end(); iter3++)
cout << iter3->first.id << " " << iter3->first.name << " "
<< iter3->second
<< endl;
return 0;
}