简介:

  • map中所有元素都是pair
  • pair中第一个元素为key(键值),起到索引作用,第二个元素为value(实值)
  • 所有元素都会根据元素的键值自动排序

本质:

  • map/multimap属于关联式容器,底层结构是用二叉树实现。

优点:

  • 可以根据key值快速找到value值

map和multimap区别

  • map不允许容器中有重复key值元素
  • multimap允许容器中有重复key值元素

map构造和赋值

函数原型:

构造:

  • map<T1, T2> mp; //map默认构造函数:
  • map(const map &mp); //拷贝构造函数

赋值:

  • map& operator=(const map &mp); //重载等号操作符

插入时会按照key值自动排序

void print(map<int,int>&m)
{for(map<int,int>::iterator it=m.begin();it!=m.end();it++){cout<<"key: "<<(*it).first<<" value:"<<(*it).second<<endl;}}
int main()
{map<int,int>m;m.insert(pair<int ,int >(1,10));m.insert(pair<int ,int >(2,20));m.insert(pair<int ,int >(3,30));m.insert(pair<int ,int >(4,40));print(m);
}

map大小和交换

函数原型:

  • size(); //返回容器中元素的数目
  • empty(); //判断容器是否为空
  • swap(st); //交换两个集合容器

map插入和删除

函数原型:

  • insert(elem); //在容器中插入元素。
  • clear(); //清除所有元素
  • erase(pos); //删除pos迭代器所指的元素,返回下一个元素的迭代器。
  • erase(beg, end); //删除区间[beg,end)的所有元素 ,返回下一个元素的迭代器。
  • erase(key); //删除容器中值为key的元素。

insert()中应该要写入一个pair

    map<int,int>m;//第一种插入m.insert(pair<int ,int >(1,10));m.insert(pair<int ,int >(2,20));m.insert(pair<int ,int >(3,30));m.insert(pair<int ,int >(4,40));//第二种m.insert(make_pair(5,50));// 第三种 不建议使用,如果插错了,会新键一个key值。m[6]=60;print(m);m.erase(m.begin());print(m);m.erase(6);//按照key来删除print(m);m.clear();print(m);

map查找和统计

函数原型:

  • find(key); //查找key是否存在,若存在,返回该键的元素的迭代器;若不存在,返回set.end();
  • count(key); //统计key的元素个数

示例:

#include <map>//查找和统计
void test01()
{map<int, int>m; m.insert(pair<int, int>(1, 10));m.insert(pair<int, int>(2, 20));m.insert(pair<int, int>(3, 30));//查找map<int, int>::iterator pos = m.find(3);if (pos != m.end()){cout << "找到了元素 key = " << (*pos).first << " value = " << (*pos).second << endl;}else{cout << "未找到元素" << endl;}//统计int num = m.count(3);cout << "num = " << num << endl;
}int main() {test01();system("pause");return 0;
}

总结:

  • 查找 — find (返回的是迭代器)
  • 统计 — count (对于map,结果为0或者1)

map容器排序

主要技术点:

  • 利用仿函数,可以改变排序规则

示例:

#include <map>class MyCompare {
public:bool operator()(int v1, int v2) {return v1 > v2;}
};void test01()
{//默认从小到大排序//利用仿函数实现从大到小排序map<int, int, MyCompare> m;m.insert(make_pair(1, 10));m.insert(make_pair(2, 20));m.insert(make_pair(3, 30));m.insert(make_pair(4, 40));m.insert(make_pair(5, 50));for (map<int, int, MyCompare>::iterator it = m.begin(); it != m.end(); it++) {cout << "key:" << it->first << " value:" << it->second << endl;}
}
int main() {test01();system("pause");return 0;
}

总结:

  • 利用仿函数可以指定map容器的排序规则
  • 对于自定义数据类型,map必须要指定排序规则,同set容器

map/multimap容器相关推荐

  1. 【C++】【第六篇-2】【黑马 p215~p242】【list容器】【set/multiset容器】【map/multimap容器】【函数对象】【谓词】【内建函数对象】

    [C++][第六篇-2][黑马 p215~p242][list容器][set/multiset容器][map/multimap容器][函数对象][谓词][内建函数对象] 3.7 list容器(p215 ...

  2. C++STL的map/ multimap容器

    3.9.1 map基本概念 简介: map中所有元素都是pair pair中第一个元素为key(键值),起到索引作用,第二个元素为value(实值) 所有元素都会根据元素的键值自动排序 本质: map ...

  3. C++ map / multimap容器

    目录 1. map基本概念 2. map构造和赋值 3. map大小和交换 4. map插入和删除 5. map查找和统计 6. map容器排序 1. map基本概念 简介: map中所有元素都是pa ...

  4. map multimapc++_黑马C++视频笔记《STL之map/multimap》

    /* map/multimap容器 * map/multimap属于关联式容器,底层结构是用二叉树实现. * - map中所有元素都是pair: * - pair中第一个元素为key(键值),起到索引 ...

  5. STL学习系列九:Map和multimap容器

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

  6. STL容器及其简单应用(stack、priority_queue、vector、deuqe、list、map/multimap、set/multiset)

    目录 前言 [1]stack操作以及应用 stack的几个核心接口 利用stack完成进制转换 [2]priority_queue操作以及应用 priority_queue的几个核心接口 利用prio ...

  7. STL之map和multimap容器

    1.简介 map是标准的关联式容器,一个map是一个键值对序列,即(key,value)对.它提供基于key的快速检索能力. map中key值是唯一的.集合中的元素按一定的顺序排列.元素插入过程是按排 ...

  8. C++ STL 容器的一些总结 --- set(multiset)和map(multimap)

    1 set和multiset 1.1 插入元素方式 set只能用insert插入数据. insert返回值是一个pair<iterator, bool>, 即插入数据的迭代器以及是否插入成 ...

  9. map容器/multimap容器

    目录 1.map基本概念 简介 本质 优点 map和multimap区别 2.map构造和赋值 功能描述: 函数原型 3.map大小和交换 功能描述 函数原型 4 map插入和删除 功能描述 函数原型 ...

最新文章

  1. 5菜鸟教程_XPLANE10菜鸟基础教程系列 飞机、机场以及天气的设置
  2. 为什么我们需要volatile关键字?
  3. 苹果开发者_苹果优秀开发者实锤 微软VS Code将支持Apple Silicon
  4. 调用ice服务器_Nodejs+socket.io搭建WebRTC信令服务器
  5. java实现次方的运算_【技术干货】Java 面试宝典:Java 基础部分(1)
  6. GoldenGate常用命令(九)
  7. Android 学习笔记 Service服务与远程通信...(AIDL)
  8. 用java和tomcat安装jenkins过程
  9. JAVA UDP 发送和接收数据
  10. 惠普i5000微型计算机,求HP 5000面板的中文解释。
  11. encapsulation dot1q vlan-id命令
  12. CTFshow——萌新记忆
  13. Spark Streaming源码解读之No Receivers彻底思考
  14. 3dMAX对电脑配置是怎么样的?
  15. intros.js中文文档-翻译不易
  16. 程序员哑巴英语修炼指南
  17. 关于小米文件管理器的介绍及源码下载
  18. CS硕士妹子找工作经历【阿里人搜等互联网公司】
  19. python3中datetime模块当前时间多加一天、一小时、一分钟
  20. 局域网里如何访问wifi路由器下的设备?

热门文章

  1. 对警报线程池的警报线程_审核和警报SQL Server作业状态更改(启用或禁用)
  2. bzoj 1664 (贪心)
  3. node.js中实现同步操作的3种实现方法
  4. [Java] HttpClient有个古怪的stalecheck选项
  5. mysql 字符集支持情况
  6. Google发转码工具 可将安卓程序转至iOS
  7. 81、通过secureCRT连接虚拟机时几种连接方式的不同
  8. 相当郁闷的问题,TabHost选项卡标签图标始终不出现?
  9. utf-8编码用于asp出现乱码的问题--从数据库调用的是乱码
  10. 第二章 Flask——Flask中的request