-----------------------------------------------map/multimap容器

map/multimap特性

map相对于set区别,map具有键值和实值,所有元素根据键值自动排序

pair的第一元素被称为键值,第二元素被称为实值

map也是以红黑树作为底层实现机制

同时map与set类似 不能进行迭代器修改键值,但是可以改变实值

而map和multimap区别在于,map不允许相同key值存在,multimap则允许相同的key值存在

-------------map常用API

map构造函数

map<T1,T2> mapTT;  map默认构造函数

map(const map& mp); 拷贝构造函数

map赋值操作

map& operator= (const map& mp); 重载=操作符

swap(mp);   交换两个集合容器

map大小操作

size(); 返回容器元素个数

empty();    判断容器是否为空

map插入数据元素操作

map.insert(...);    往容器里插入元素,并返回pair<iterator,bool>

map<int,string> mapStu;

//第一种 通过pair方式插入对象

mapStu.insert(pair<int,string>(3,"小张"));

//第二种 通过pair方式插入对象

mapStu.insert(make_pair(-1,"小张"));

//第三种 通过value_type的方式插入独享

mapStu.insert(map<int,string>::value_type(1,"小张"));

//第四种 通过数组方式进行插入

mapStu[3] = "小张";

mapStu[5] = "小李";

 PS:

1、前三种方法,采用的是insert()方法,该方法返回值为pair<iterator,bool>

2、第四种方法很直观,但存在一个性能问题:插入3时,先在mapStu中查找主键为3的项,若没发现,则将一个键为3

,值为初始化的对组插入到mapStu当中,然后再将值修改成"小张",若发现存在3这个键,则修改这个键对应的value

3、string strName = mapStu[2];  ......取操作和插入操作

只有当mapStu存在2这个键的时候才是正确的取操作,否则将会自动插入一个实例,键为2,值为初始值!!

map删除操作

clear();    清空

erase(pos); 删除迭代器所指向元素,返回下一个元素迭代器

earse(beg,end); 删除区间所有元素,返回下一个元素的迭代器

earse(key); 删除容器中值为key的元素

map查找和统计

find(key);  查找key是否存在,若存在,返回该键的元素迭代器,若不存在,返回set.end()

count(key); 统计key元素个数(对于map,返回1、0)

lower_bound(keyElem); 返回第一个key>=keyElem的迭代器

upper_bound(keyElem); 返回第一个key>keyElem的迭代器

equal_range(keyElem); 返回容器中key与keyElem想的的上下限的两个迭代器

map排序

1、默认根据key值小->大排序

2、利用仿函数,自定义排序原则(同set)

class cmp {

public:

bool operator() (int v1,int v2) {

return v1 > v2;

}

}

map<int,int,cmp>::iterator

利用迭代器遍历

it->first,it->second

或(*it).first,(*it).second

#include<iostream>
#include<map>
using namespace std; void test01 () {
//第一个参数key类型,第二个参数value类型
map<int,int> mp;
//插入数据 pair.first key值 pair.second value值
//第一种
pair<map<int,int>::iterator,bool> ret = mp.insert(pair<int,int>(10,10));
if (ret.second) {
cout << "插入成功!" << endl;
}
else {
cout << "插入失败!" << endl;
}
ret = mp.insert(pair<int,int>(10,20));
if (ret.second) {
cout << "插入成功!" << endl;
}
else {
cout << "插入失败!" << endl;
}
//第二种
mp.insert(make_pair(20,20));
//第三种
mp.insert(map<int,int>::value_type(30,30));
//第四种
mp[40] = 40; //若key不存在创建 若存在则修改
mp[10] = 20;
//打印
for (map<int,int>::iterator it = mp.begin();it != mp.end();it ++) {
cout << "key: " << it->first << " value: " << it->second << endl;
}
cout << "mp[60]: " << mp[60] << endl;
for (map<int,int>::iterator it = mp.begin();it != mp.end();it ++) {
cout << "key: " << it->first << " value: " << it->second << endl;
}
//若访问一个key不存在的数据,map将这个访问的key插入到容器,并将value置为默认值 }

C++ map容器 学习总结的更多相关文章

  1. stl map容器 学习

    #include<map> 1.map的声明: map<string,int>map_1; map_1 就是一个string对int的映射. 2.map的用法(映射): map ...

  2. STL序列式容器学习总结

    STL序列式容器学习总结 参考资料:<STL源码剖析> 参考网址: Vector: http://www.cnblogs.com/zhonghuasong/p/5975979.html L ...

  3. STL之map容器的详解

    一.关于map的介绍 map是STL的 一个容器,和set一样,map也是一种关联式容器.它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键 字的值)的数据 ...

  4. 详解C++ STL map 容器

    详解C++ STL map 容器 本篇随笔简单讲解一下\(C++STL\)中的\(map\)容器的使用方法和使用技巧. map容器的概念 \(map\)的英语释义是"地图",但\( ...

  5. C++ STL 中 map 容器

    C++ STL 中 map 容器 Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据 处理能力,由于这个特性,它 ...

  6. map 容器的使用

    C++中map容器提供一个键值对容器,map与multimap差别仅仅在于multiple允许一个键对应多个值. 一.map的说明    1   头文件   #include   <map> ...

  7. 一种map容器遍历的方法

    遍历算法是一种很常见而且非常重要的算法,我们用map容器的时候可能用的比较多的是查找,我今天才第一次要用到遍历.下面举个例子就知道了. map<string,string> mp; str ...

  8. CSU 1113 Updating a Dictionary(map容器应用)

    题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1113 解题报告:输入两个字符串,第一个是原来的字典,第二个是新字典,字典中的元素的格式为 ...

  9. map容器

    map容器一般用于对字符串进行编号,主要用于建图方面,例如把城市名按数字进行编号 #include"stdio.h" #include"string.h" #i ...

  10. Java集合Map接口与Map.Entry学习

    Java集合Map接口与Map.Entry学习 Map接口不是Collection接口的继承.Map接口用于维护键/值对(key/value pairs).该接口描述了从不重复的键到值的映射. (1) ...

随机推荐

  1. Oracle impdp 导入报错 ORA-39083 + ORA-00439

    Oracle 11G R2 impdp导入的时候 一直报错: ORA-39083: 对象类型 TABLE:"xxx"."xxx" 创建失败, 出现错误: ORA ...

  2. 通过TTS模型让猴哥给你讲个故事

    "假"标题:通过TTS模型让猴哥给你讲个故事 "真"标题:使用Python调用硅基流动TTS模型并播放返回的音频数据过程记录 TTS介绍 TTS(Text-to ...

  3. JavaScript Library – Embla Carousel

    前言 2022 年 4 月,我写了一篇 Swiper 介绍. Swiper 是当时前端最多人使用的 Slider 库,没有之一,一骑绝尘. 但是!时过境迁,这两年已经有一匹神秘的黑马悄悄杀上来了. 它 ...

  4. apk签名问题

    https://www.jianshu.com/p/0bd7b6d6e068 https://blog.51cto.com/u_15520037/5703487

  5. Spring的AoP(面向切面编程)

    作用: 就是把我们程序重复的代码抽取出来,在需要执行的时候,使用动态代理的技术,在不修改源码的 基础上,对我们的已有方法进行增强. 优势: 减少重复代码 提高开发效率 维护方便 AoP的实现方式:动态 ...

  6. 如何使用 MySQL 的 EXPLAIN 语句进行查询分析?

    如何使用 MySQL 的 EXPLAIN 语句进行查询分析? EXPLAIN 是 MySQL 提供的分析 SQL 查询执行计划的工具,用于了解查询语句的执行过程,帮助优化查询性能. 1. EXPLAI ...

  7. Vue横向滚动鼠标控制

    let level_cards // 标记可移动 , move_start // 移动初始的x位置 , move_x // 移动初始的容器偏移量 , move_scroll_left // 判断是否为 ...

  8. windows实现每天定时截图

    windows实现每天定时截图 一直想要做一个功能来给自己的电脑每天进行一个截图操作,今天终于做好了,下面分享一下设置的过程. 使用工具 任务计划程序(系统自带) snipaste (手动下载) 设置 ...

  9. Spring中的依赖注入DI

    目录 Spring中的依赖注入DI Spring中的依赖注入DI 依赖注入的简单理解就是给对象设置变量值. Spring配置文件 <?xml version="1.0" en ...

  10. UnoCSS原子CSS引擎

    UnoCSS是一款原子化的即时按需 CSS 引擎,其中没有核心实用程序,所有功能都是通过预设提供的.默认情况下UnoCSS应用通过预设来实现相关功能. UnoCSS中文文档: https://www. ...