您的位置:首页 > 其它

关联容器map, multimap

2016-07-09 11:00 274 查看
map/multimap里放着的都是pair模板类的对象,且按first从小到大排序。

pair 模板:

template <class _T1, class _T2>

struct pair

{

typedef _T1 first_type;

typedef _T2 second_type;

_T1 first;

_T2 second;

pair():first(),second(){};

pair(const _T1 &__a, const _T2 & __b):first(__a),second(__b){}

template<class _U1, class _U2>

pair(const pair<_U1, _U2>& __p): first(__p.first),second(__p.second){} //拷贝构造函数

}

multimap中的元素由<关键字,值>组成,每个元素是一个pair对象,关键字就是first成员变量,其类型是key.

multimap中允许多个元素的关键字相同。元素按照first成员变量从小到大排列,缺省情况下用less<Key>定义关键字的“小于”关系。

下面是关于multimap的一个小例子:

#include <iostream>
#include <map>
using namespace std;

int main()
{
typedef multimap<int, double, less<int>> mmid;
mmid pairs;
cout << "1)" << pairs.count(15) << endl;
//map中定义typedef value_type pair<const key,T>,模板类为pair<int,double>
pairs.insert(mmid::value_type(2, 3.4));
cout << "2)" << pairs.count(2) << endl;
pairs.insert(mmid::value_type(1, 2.4));
for (mmid::iterator it = pairs.begin(); it != pairs.end(); it++)
{
cout << "(" << (*it).first << "," << (*it).second << ")" << " ";
}
cout << endl;
return 0;
}


运行结果:



下面是一个学生成绩录入和查询系统,应用了multimap的例子,通过查找输出系统中比查询分数低的最大学生ID号的学生信息。

#include <iostream>
#include <map>
#include <string>

using namespace std;

class Student
{
public :
int score;
struct Info
{
int ID;
string name;
};
Info info;
};

typedef multimap<int, Student::Info> MAP;

int main()
{
MAP map;
Student student;
string cmd;
while (cin >> cmd)
{
if (cmd == "add")
{
cin >> student.score >> student.info.ID >> student.info.name;
map.insert(MAP::value_type(student.score, student.info));
}
else if (cmd == "query")
{
int sco = 0;
cin >> sco;
MAP::iterator it;
it = map.lower_bound(sco);
if (it != map.begin())
{
it--;
sco = it->first;
int maxid = (*it).second.ID;
MAP::iterator maxp = it;
for (; it != map.begin() && (*it).first == sco; it--)
{
if ((*it).second.ID > maxid)
{
maxid = (*it).second.ID;
maxp = it;
}
}
if (it == map.begin())
{
if (maxid < it->second.ID)
{
maxid = it->second.ID;
maxp = it;
}
}
cout << maxp->first << " " << maxp->second.ID << " " << maxp->second.name << endl;
}
else
{
cout << "Not find !" << endl;
}
}
}
return 0;
}


运行结果:



参考链接:
https://www.coursera.org/learn/cpp-chengxu-sheji
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: