STL map 常见用法详解
《算法笔记》学习笔记
map 常见用法详解
**map翻译为映射,也是常用的STL容器 **
map可以将任何基本类型(包括STL容器)映射到任何基本类型(包括STL容器)
1. map 的定义
//单独定义一个map
map<typename1, typename2> mp;
//map和其他的STL容器在定义上有点不同
//因为 map 需要确定映射前类型(键key)和映射后类型(值value)
//其中第一个是键的类型,第二个是值的类型
//字符串到整型的映射
//必须使用string而不能用char数组
map<string, int> mp;
//map的键和值也可以是STL容器
//将一个 set 容器映射到一个字符串
map<set<int>, string> mp;
2. map 容器内元素访问
//map 一般有两种访问方式:通过下标或迭代器访问
(1) 通过下标访问
//和访问普通的数组是一样的
//注意:map中的键是唯一的
#include <stdio.h>
#include <map>
using namespace std;
int main() {
map<char, int> mp;
mp['c'] = 20;
mp['c'] = 30; //20被覆盖
printf("%d\n", mp['c']);
return 0;
}
(2) 通过迭代器访问
//map 迭代器的定义和其他STL容器迭代器定义的方式相同
map<typename1, typename2>::iterator it;
//typename1和typename2就是定义map填写时的类型
//map的每一对映射都有两个typename,这决定了必须能通过一个 it 来同时访问键和值。
//map 可以使用 it->first 来访问键, it->second 来访问值。
#include <stdio.h>
#include <map>
using namespace std;
int main() {
map<char, int> mp;
mp['m'] = 20;
mp['r'] = 30;
mp['a'] = 40;
for(map<char, int>::iterator it = mp.begin(); it != mp.end(); it++) {
printf("%c %d\n", it -> first, it -> second);
}
return 0;
}
3. map常用函数实例解析
**(1) find() **
//find(key)返回键为key的映射的迭代器,时间复杂度为O(logN),N为map中映射的个数
#include <stdio.h>
#include <map>
using namespace std;
int main() {
map<char, int> mp;
mp['a'] = 1;
mp['b'] = 2;
mp['c'] = 3;
map<char, int>::iterator it = mp.find('b');
printf("%c %d\n", it -> first, it -> second);
return 0;
}
(2) erase()
//erase()有两种用法:删除单个元素,删除一个区间内的所有元素
//<1> 删除单个元素
//删除单个元素有两种方法:
//mp.erase(it), it为需要删除的元素的迭代器,时间复杂度为O(1)
#include <stdio.h>
#include <map>
using namespace std;
int main() {
map<char, int> mp;
mp['a'] = 1;
mp['b'] = 2;
mp['c'] = 3;
map<char, int>::iterator it = mp.find('b');
mp.erase(it); //删除 b 2
for(map<char, int>::iterator it = mp.begin(); it != mp.end(); it++) {
printf("%c %d\n", it -> first, it -> second);
}
return 0;
}
//mp.erase(key), key为欲删除的映射的键。时间复杂度为O(logN),N为map内元素的个数
#include <stdio.h>
#include <map>
using namespace std;
int main() {
map<char, int> mp;
mp['a'] = 1;
mp['b'] = 2;
mp['c'] = 3;
mp.erase('b'); //删除键为b的映射,即 b 2
for(map<char, int>::iterator it = mp.begin(); it != mp.end(); it++) {
printf("%c %d\n", it -> first, it -> second);
}
return 0;
}
//<2> 删除一个区间内的所有元素
//mp.erase(first, last), 其中first为需要删除的区间的起始迭代器,
//而last则为需要删除的区间的末尾迭代器的下一个地址,也即为删除左闭右开
//的区间[first, last)。时间复杂度为O(last - first)
#include <stdio.h>
#include <map>
using namespace std;
int main() {
map<char, int> mp;
mp['a'] = 1;
mp['b'] = 2;
mp['c'] = 3;
mp<char, int>::iterator it = mp.find('b'); //令it指向键为b的映射
mp.erase(it. mp.end()); //删除it之后的所有映射,即b 2和c 3
for(map<char, int>::iterator it = mp.begin(); it != mp.end(); it++) {
printf("%c %d\n", it -> first, it -> second);
}
return 0;
}
(3) size()
//size()用来获取map中映射的对数,时间复杂度位O(1)
#include <stdio.h>
#include <map>
using namespace std;
int main() {
map<char, int> mp;
mp['a'] = 10;
mp['b'] = 20;
mp['c'] = 30;
printf("%d\n", mp.size()); //3对映射
return 0;
}
(4) clear()
//clear()用来清空map中的所有元素,复杂度为O(N),其中N为map中元素的个数。
#include <stdio.h>
#include <map>
using namespace std;
int main() {
map<char, int> mp;
mp['a'] = 1;
mp['b'] = 2;
mp['c'] = 3;
mp.clear(); //清空map
printf("%d\n", mp.size());
return 0;
}
4.map的常见用途
- 需要建立字符(或字符串)与整数之间映射的题目,使用map可以减少代码量。
- 判断大整数或者其他类型数据是否存在的题目,可以把map当作bool数组用。
- 字符串和字符串的映射也有可能会遇到。
STL map 常见用法详解的更多相关文章
- C++标准模板库(STL)——map常见用法详解
map的定义 map<typename1, typename2> mp; map需要确定映射前类型和映射后类型,所以需要在<>内填写两个类型,第一个是键的类型,第二个是值的类型 ...
- STL pair 常见用法详解
<算法笔记>学习笔记 pair 常见用法详解 //pair是一个很实用的"小玩意",当想要将两个元素绑在一起作为一个合成元素, //又不想因此定义结构体时,使用pair ...
- STL stack 常见用法详解
<算法笔记>学习笔记 stack 常见用法详解 stack翻译为栈,是STL中实现的一个后进先出的容器.' 1.stack的定义 //要使用stack,应先添加头文件#include &l ...
- STL priority_queue 常见用法详解
<算法笔记>学习笔记 priority_queue 常见用法详解 //priority_queue又称优先队列,其底层时用堆来实现的. //在优先队列中,队首元素一定是当前队列中优先级最高 ...
- STL queue 常见用法详解
<算法笔记>学习笔记 queue 常见用法详解 queue翻译为队列,在STL中主要则是实现了一个先进先出的容器. 1. queue 的定义 //要使用queue,应先添加头文件#incl ...
- STL set 常见用法详解
<算法笔记>学习笔记 set 常见用法详解 set是一个内部自动有序且不含重复元素的容器 1. set 的定义 //单独定义一个set set<typename> name: ...
- STL vector常见用法详解
<算法笔记>中摘取 vector常见用法详解 1. vector的定义 vector<typename> name; //typename可以是任何基本类型,例如int, do ...
- STL string 常见用法详解
string 常见用法详解 1. string 的定义 //定义string的方式跟基本数据类型相同,只需要在string后跟上变量名即可 string str; //如果要初始化,可以直接给stri ...
- C++标准模板库(STL)——queue常见用法详解
queue的定义 queue<typename> name; queue容器内元素的访问 由于队列本身就是一种先进先出的限制性数据结构,因此在STL中只能通过front()来访问队首元素, ...
随机推荐
- Java字节码例子解析
举个简单的例子: public class Hello { public static void main(String[] args) { String string1 = ...
- HTTP协议对收发消息的格式要求
每个HTTP请求和响应都遵循相同的格式. 一个HTTP包含Header和Body两部分,其中Body是可选的. HTTP响应的Header中有一个Content-Type表明响应的内容格式. 它的值如 ...
- SecureCRT的安装与破解,详细过程
使用SecureCRT可以方便用户在windows环境下对linux主机进行管理,这里为大家讲一下SecureCRT的破解方法,仅供大家参考学习: 1.首先在本站下载SecureCRT 7.3.6最新 ...
- Navicat连接的某个表一直加载并且不能关闭
问题: 今天下午突然发现数据库的一张表一直加载,也出不来数据,并且也不能关闭.解决办法: 在Navicat中中执行如下命令: SHOW PROCESSLIST; 如果state列中有lock字眼,通过 ...
- 笔记一(固件、BIOS、UEFI)
1.固件 固件一般是指保存在ROM中的程序和数据,通过固件操作系统按照标准的设备驱动实现特定机器的运行. 简单来讲,固件就是固化在ROM的软件,当然也可以通过特定的工具进行升级. MP3.MP4.手机 ...
- MySQL-插入更新 ON DUPLICATE KEY UPDATE
向数据库中插入一条记录,若该数据的主键值(UNIQUE KEY)已经在表中存在,则执行后面的 UPDATE 操作.否则执行前面的 INSERT 操作. 测试表结构 CREATE TABLE `flum ...
- Table 'xxx.hibernate_sequence' doesn't exist
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'xxx.hibernate_sequence' ...
- leetcode1284 转化为全零矩阵的最少反转次数
m == mat.length n == mat[0].length 1 <= m <= 3 1 <= n <= 3 mat[i][j] 是 0 或 1 . BFS, 代码来自 ...
- ScreenShot 截图工具类
import android.app.Activity; import android.graphics.Bitmap; import android.graphics.Rect; import an ...
- CSS三角形的实现原理及运用
原理 css盒模型 一个盒子包括: margin+border+padding+content– 上下左右边框交界处出呈现平滑的斜线. 利用这个特点, 通过设置不同的上下左右边框宽度或者颜色可以得到小 ...