使用map multimap必须包含头文件map

*:multimap

1)multimap定义

template<class Key,class Pred=less<Key>,class A=allocator<T>

class multimp

{

.....

typedef pair<const Key,T>value_type;    //value_type经常用到

......

};

multimap每个对象都是pair模板类的对象。元素first成员变量也称关键字,其类型为Key。second成员变量也称值,类型为T。multimap容器里的元素是按照关键字从小到大排序的,且允许多个关键字相同。

上面multimap中的value_type实际上表示容器中的元素的类型。c++允许在类的内部定义类型。

2)成员函数

3)例

  1. //program 19.4.4.1 用multimap实现的学生信息管理程序
  2. #include <iostream>
  3. #include <map> //使用multimap需要包含此头文件
  4. #include <string>
  5. using namespace std;
  6. class CStudent
  7. {
  8. public:
  9. struct CInfo //类的内部还可以定义类
  10. {
  11. int id;
  12. string name;
  13. };
  14. int score;
  15. CInfo info; //学生的其他信息
  16. };
  17. typedef multimap<int,CStudent::CInfo> MAP_STD;
  18. int main()
  19. {
  20.  
  21. MAP_STD mp;
  22. CStudent st;
  23. string cmd;
  24. while( cin >> cmd ) {
  25. if( cmd == "Add") {
  26. cin >> st.info.name >> st.info.id >> st.score ;
  27. mp.insert(MAP_STD::value_type(st.score,st.info ));
  28. }
  29. else if( cmd == "Query" ){
  30. int score;
  31. cin >> score;
  32. MAP_STD::iterator p = mp.lower_bound (score);
  33. if( p!= mp.begin()) {
  34. --p;
  35. score = p->first; //比要查询分数低的最高分
  36. MAP_STD::iterator maxp = p;
  37. int maxId = p->second.id;
  38. for( ; p != mp.begin() && p->first == score; --p) {
  39. //遍历所有成绩和score相等的学生
  40. if( p->second.id > maxId ) {
  41. maxp = p;
  42. maxId = p->second.id ;
  43. }
  44. }
  45. if( p->first == score) { //如果上面循环是因为 p == mp.begin()
  46. // 而终止,则p指向的元素还要处理
  47. if( p->second.id > maxId ) {
  48. maxp = p;
  49. maxId = p->second.id ;
  50. }
  51. }
  52. cout << maxp->second.name << " " << maxp->second.id << " "
  53. << maxp->first << endl;
  54. }
  55. else //lower_bound的结果就是 begin,说明没人分数比查询分数低
  56. cout << "Nobody" << endl;
  57. }
  58. }
  59. return ;
  60. }

**:map

1)定义

template<class Key,class T,class Pred=less<Key>,class A=allocator<T>>

class map {

......

typedef pair<const Key,T>value_type;

.......

};

map 和multimap十分相似,区别在于,map容器中的元素,关键字不能重复。

multimap有的成员函数map都有,此外map还有成员函数operator[]:

T&operator[](Key k);

该成员函数返回first值为k的元素的second部分。如果容器中没有元素的first值等于k,则自动添加值为k的元素;如果该元素的成员变量是一个对象,则用无参构造函数对其初始化。

2)例

  1. //program 19.4.5.1.cpp map的用法示例
  2. #include <iostream>
  3. #include <map> //使用map需要包含此头文件
  4. using namespace std;
  5. template <class T1,class T2>
  6. ostream & operator <<( ostream & o,const pair<T1,T2> & p)
  7. { //将pair对象输出为 (first,second)形式
  8. o << "(" << p.first << "," << p.second << ")";
  9. return o;
  10. }
  11. template<class T>
  12. void Print( T first,T last)
  13. {//打印区间[first,last)
  14. for( ; first != last; ++ first)
  15. cout << * first << " ";
  16. cout << endl;
  17. }
  18. typedef map<int,double,greater<int> > MYMAP; //此容器关键字是整型,
  19. //元素按关键字从大到小排序
  20. int main()
  21. {
  22. MYMAP mp;
  23. mp.insert(MYMAP::value_type(,2.7));
  24. pair<MYMAP::iterator,bool> p = mp.insert(make_pair(,99.3));
  25. if( ! p.second )
  26. cout << * (p.first) << " already exists" << endl; //会输出
  27. cout << "1) " << mp.count() << endl; //输出 1) 1
  28. mp.insert(make_pair(,9.3));
  29. cout << "2) " << mp[] << endl;//如果没有关键字为40的元素,则插入一个
  30. cout << "3) ";Print(mp.begin(),mp.end());//输出:3) (40,0)(20,9.3)(15,2.7)
  31. mp[] = 6.28; //把关键字为15的元素值改成6.28
  32. mp[] = 3.14; //插入关键字为17的元素,并将其值设为3.14
  33. cout << "4) ";Print(mp.begin(),mp.end());
  34. return ;
  35. }

4.3 map和multimap的更多相关文章

  1. STL的基本使用之关联容器:map和multiMap的基本使用

    STL的基本使用之关联容器:map和multiMap的基本使用 简介 map 和 multimap 内部也都是使用红黑树来实现,他们存储的是键值对,并且会自动将元素的key进行排序.两者不同在于map ...

  2. STL之Map和multimap容器

    1.Map和multimap容器 1)map是标准的关联式容器,一个map是一个键值对序列,即(key,value)对.它提供基于key的快速检索能力. 2)map中key值是唯一的.集合中的元素按一 ...

  3. C++ STL 学习笔记__(8)map和multimap容器

    10.2.9 Map和multimap容器 map/multimap的简介 ²  map是标准的关联式容器,一个map是一个键值对序列,即(key,value)对.它提供基于key的快速检索能力. ² ...

  4. STL Map和multimap 容器

    STL Map和multimap 容器 map/multimap的简介 map是标准的关联式容器,一个map是一个键值对序列,即(key,value)对.它提供 基于key的快速检索能力.       ...

  5. STL标准库-容器-map和multimap

    技术在于交流.沟通,本文为博主原创文章转载请注明出处并保持作品的完整性 map与multimap为关联容器,结构如下 map底层实现依然是rb_tree 他的data可以改,但是key不能改,因此ma ...

  6. STL中 map 和 multimap

    1. 所在头文件<map>. 命名空间std, 声明如下: namespace std{ template <class Key,class T, class Compare = l ...

  7. 【C++ STL】Map和Multimap

    1.结构 Map和multimap将key/value pair(键值/实值 队组)当作元素,进行管理.他们根据key的排序准则将元素排序.multimap允许重复元素,map不允许. 元素要求: k ...

  8. STL学习笔记— —容器map和multimap

    简单介绍 在头文件<map> 中定义 namespace std { template <typename Key, typename T, typename Compare = l ...

  9. STL关联式容器之map和multimap

    一,map和multimap的概念 1.map和multimap的基本知识 map是标准的关联式容器,一个map是一个键值对序列,即(key,value)对.它提供基于key的快速检索能力. map中 ...

随机推荐

  1. nginx 虚拟主机

    基于域名的虚拟主机 创建站点目录 [root@nginx conf]# cd /usr/local/nginx/html/ [root@nginx html]# pwd /usr/local/ngin ...

  2. 【android-tips】如何在view中取得activity对象

    (转载请注明出处:http://blog.csdn.net/buptgshengod) 今天想实现在view中返回上一个activity的功能,想了半天.因为在虽然view是包含于一个activity ...

  3. BZOJ2002——[Hnoi2010]Bounce 弹飞绵羊

    1.题目大意:就是给一个动态的森林求size域 2.分析: 这个就是一个动态树问题,对于每一个位置i有i+ki这个父亲, 于是这就是一个森林了,然后对于每一个修改直接lct维护就好,询问就是i到最外面 ...

  4. eclipse pydev 跳转

    [windows]-[Preference]-[Pydev]-[Interpreter-Python]-[Libraries]-system PYTHONPATH 全部加一遍,先加父目录,再加子目录.

  5. event相关

    event.button 事件属性可返回一个整数,指示当事件被触发时哪个鼠标按键被点击. event.keyCode  事件属性可返回一个整数,指示当事件被触发时哪个键盘按键被点击. <scri ...

  6. SMT 的基本流程?SMT的工艺流程?SMT的设备操作?

    一.SMT工艺流程------单面组装工艺来料检测 --> 丝印焊膏(点贴片胶)--> 贴片 --> 烘干(固化) --> 回流焊接 --> 清洗 --> 检测 - ...

  7. 第三方登录(QQ登录)开发流程详解

    原文:http://www.cnblogs.com/it-cen/p/4338202.html 近排由于工作的繁忙,已经一个星期没写博文做分享了,接下来我对网站接入第三方登录----QQ登录的实现逻辑 ...

  8. poj 1035

    http://poj.org/problem?id=1035 poj的一道字符串的水题,不难,但就是细节问题我也wa了几次 题意就是给你一个字典,再给你一些字符,首先如果字典中有这个字符串,则直接输出 ...

  9. 百度和google的区别

    一.百度 二.google

  10. Java web 开发环境搭建

    1.下载jdk-8u60-windows-i586.exe;安装过程会让指定jre的安装路径,此处最好指定和jdk安装一个目录下(D:\Program Files\Java\jdk1.8.0_60,D ...