map/multimap容器
简介:
- 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容器相关推荐
- 【C++】【第六篇-2】【黑马 p215~p242】【list容器】【set/multiset容器】【map/multimap容器】【函数对象】【谓词】【内建函数对象】
[C++][第六篇-2][黑马 p215~p242][list容器][set/multiset容器][map/multimap容器][函数对象][谓词][内建函数对象] 3.7 list容器(p215 ...
- C++STL的map/ multimap容器
3.9.1 map基本概念 简介: map中所有元素都是pair pair中第一个元素为key(键值),起到索引作用,第二个元素为value(实值) 所有元素都会根据元素的键值自动排序 本质: map ...
- C++ map / multimap容器
目录 1. map基本概念 2. map构造和赋值 3. map大小和交换 4. map插入和删除 5. map查找和统计 6. map容器排序 1. map基本概念 简介: map中所有元素都是pa ...
- map multimapc++_黑马C++视频笔记《STL之map/multimap》
/* map/multimap容器 * map/multimap属于关联式容器,底层结构是用二叉树实现. * - map中所有元素都是pair: * - pair中第一个元素为key(键值),起到索引 ...
- STL学习系列九:Map和multimap容器
1.map/multimap的简介 map是标准的关联式容器,一个map是一个键值对序列,即(key,value)对.它提供基于key的快速检索能力. map中key值是唯一的.集合中的元素按一定的顺 ...
- STL容器及其简单应用(stack、priority_queue、vector、deuqe、list、map/multimap、set/multiset)
目录 前言 [1]stack操作以及应用 stack的几个核心接口 利用stack完成进制转换 [2]priority_queue操作以及应用 priority_queue的几个核心接口 利用prio ...
- STL之map和multimap容器
1.简介 map是标准的关联式容器,一个map是一个键值对序列,即(key,value)对.它提供基于key的快速检索能力. map中key值是唯一的.集合中的元素按一定的顺序排列.元素插入过程是按排 ...
- C++ STL 容器的一些总结 --- set(multiset)和map(multimap)
1 set和multiset 1.1 插入元素方式 set只能用insert插入数据. insert返回值是一个pair<iterator, bool>, 即插入数据的迭代器以及是否插入成 ...
- map容器/multimap容器
目录 1.map基本概念 简介 本质 优点 map和multimap区别 2.map构造和赋值 功能描述: 函数原型 3.map大小和交换 功能描述 函数原型 4 map插入和删除 功能描述 函数原型 ...
最新文章
- 5菜鸟教程_XPLANE10菜鸟基础教程系列 飞机、机场以及天气的设置
- 为什么我们需要volatile关键字?
- 苹果开发者_苹果优秀开发者实锤 微软VS Code将支持Apple Silicon
- 调用ice服务器_Nodejs+socket.io搭建WebRTC信令服务器
- java实现次方的运算_【技术干货】Java 面试宝典:Java 基础部分(1)
- GoldenGate常用命令(九)
- Android 学习笔记 Service服务与远程通信...(AIDL)
- 用java和tomcat安装jenkins过程
- JAVA UDP 发送和接收数据
- 惠普i5000微型计算机,求HP 5000面板的中文解释。
- encapsulation dot1q vlan-id命令
- CTFshow——萌新记忆
- Spark Streaming源码解读之No Receivers彻底思考
- 3dMAX对电脑配置是怎么样的?
- intros.js中文文档-翻译不易
- 程序员哑巴英语修炼指南
- 关于小米文件管理器的介绍及源码下载
- CS硕士妹子找工作经历【阿里人搜等互联网公司】
- python3中datetime模块当前时间多加一天、一小时、一分钟
- 局域网里如何访问wifi路由器下的设备?