map

map

翻译为映射,可以实现将任何基本类型(包括 STL 容器)映射到任何基本类型(包括 STL 容器),在使用时需加上 map 头文件,即 #include <map>,并在头文件下加上 “using namespace std;”。

1. map 的定义

单独定义一个 map:

map<typename1, typename2> mp ;

typename1:键的类型
typename2:值的类型

将键的类型映射到值的类型

例:将字符串映射到整型

map<string, int> mp ;

2. map 容器内元素的访问

map 一般有两种访问方式:通过下标访问和通过迭代器访问。

(1) 通过下标访问

例:typename<char, int> mp ;

则 mp[‘c’] = 20 ; 完成将字符 c 到整型数字 20 的映射

(2) 通过迭代器访问

map<typename1, typename2>::iterator it ;

map 使用 it->first 来访问键, 使用 it->second 来访问值

#include <cstdio>
#include <map>
using namespace std ;
int main () {
	map<char, int> mp ;
	mp['N'] = 1 ; 
	mp['B'] = 2 ;
	mp['A'] = 3 ; 
	for (map<char, int>::iterator it = mp.begin(); it != mp.end(); it++) {
		printf ("%c %d\n", it -> first, it -> second) ;
	}
	return 0 ;
}

输出如下:

A 3
B 2
N 1

可以观察到输出结果是按照 A<B<N 的顺序排序之后输出,这是由于 map 内部是使用红黑树实现的 (set 也是), 在建立映射的过程中会自动实现从小到大的排序功能。

3. map 常用函数实现实例

(1) find()

//find(key):返回键为 key 的映射的迭代器
#include <cstdio>
#include <map>
using namespace std ;
int main () {
	map<char, int> mp ;
	mp['N'] = 1 ; 
	mp['B'] = 2 ;
	mp['A'] = 3 ;
	map<char, int>::iterator it = mp.find('B') ;
	printf ("%c %d", it -> first, it -> second) ;
	return 0 ;
} 

(2) erase()

i) 删除单个元素

  • mp.erase(it), it为需要删除的元素的迭代器
#include <cstdio>
#include <map>
using namespace std ;
int main () {
	map<char, int> mp ;
	mp['N'] = 1 ; 
	mp['B'] = 2 ;
	mp['A'] = 3 ;
	map<char, int>::iterator it = mp.find('N') ;
	mp.erase(it) ;
	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 为欲删除的映射的键
#include <cstdio>
#include <map>
using namespace std ;
int main () {
	map<char, int> mp ;
	mp['N'] = 1 ; 
	mp['B'] = 2 ;
	mp['A'] = 3 ;
	mp.erase('N') ;
	for (map<char, int>::iterator it = mp.begin(); it != mp.end(); it++) {
		printf ("%c %d\n", it -> first, it -> second) ;
	}
	return 0 ;
} 

ii) 删除一个区间内的所有元素

mp.erase(first, last), 删除 [first, last) 区间内元素

#include <cstdio>
#include <map>
using namespace std ;
int main () {
	map<char, int> mp ;
	mp['N'] = 1 ; 
	mp['B'] = 2 ;
	mp['A'] = 3 ;
	mp.erase(mp.find('B'), mp.end()) ;
	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 中映射的对数
#include <cstdio>
#include <map>
using namespace std ;
int main () {
	map<char, int> mp ;
	mp['N'] = 1 ; 
	mp['B'] = 2 ;
	mp['A'] = 3 ;
	printf ("%d", mp.size()) ;
	return 0 ;
}  

(4) clear()

//clear():用来清空 map 中所有元素
#include <cstdio>
#include <map>
using namespace std ;
int main () {
	map<char, int> mp ;
	mp['N'] = 1 ; 
	mp['B'] = 2 ;
	mp['A'] = 3 ;
	mp.clear() ;
	printf ("%d", mp.size()) ;
	return 0 ;
}   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值