四、STL之map容器常见用法

一、map简介

  • map译为映射,可以将任何基本类型(包括STL容器)映射到任何基本类型(包括STL容器)
  • map的键和值是唯一的
  • 头文件
#include<map>
using namespace std;
  • 常见用途
    • 需要建立字符(或字符串)与整数之间映射的题目,使用map可以减少代码量
    • 判断大整数或者其它类型数据是否存在的题目,可以把map当作bool数组用
    • 字符串和字符串的映射

二、map定义

  • map需要确定映射前类型(键key)和映射后类型(值value),所以需要在<>内填写两个类型,其中第一个是键类型,第二个是值类型。
  • 如果是字符串到整型的映射,必需使用string,不能用char数组。这是因为char数组作为数组,是不能被作为键值的。
  • map的键和值也可以是STL容器。
map<string, int> mp;
map<set<int>, string> mp;

三、map容器内元素的访问

  • 通过下标访问,map中的键是唯一的
  • 通过迭代器访问
    • map的每一对映射都有两个typename,故必需通过一个it来同时访问键和值
    • map可以用it->first来访问键,用it->second来访问值
    • map会以键从小到大的顺序自动排序,这是由于map内部是使用红黑树实现的(set也是), 在建立映射时会自动实现从小到大排序的功能。
#include<stdio.h>
#include<map>
using namespace std;
int main(){
	map<char, int> mp;
	mp['c'] = 1;
	mp['c'] = 9;
	printf("%d\n", mp['c']);;//输出9

	mp['a'] = 8;
	mp['d'] = 19;
	for(map<char, int>::iterator it = mp.begin(); it != mp.end(); it++)
		printf("%c %d\n", it->first, it->second);
	return 0;
	//a 9
	//c 8
	//d 19
}

四、map常用函数

  • find():find(key)返回键为key的映射的迭代器,时间复杂度为O(logn),n为map中映射的个数
  • erase():删除元素
    • 删除单个元素
      • mp.erase(it),it为要删除元素的迭代器,时间复杂度O(1)
      • mp.erase(key),key为要删除的映射的键,时间复杂度为O(logn),n为map中元素的个数
    • 删除一个区间内的所有元素
      • mp.erase(first, last),其中first为需要删除的区间的起始迭代器,last为需要删除的末尾迭代器的下一个地址,即删除区间[first,last),时间复杂度为O(last-first)
  • size():获取map中映射的对数,时间复杂度O(1)
  • clear():清空map中的所有元素,复杂度为O(n),n为map中元素的个数。
#include<stdio.h>
#include<map>
using namespace std;
int main(){
	map<char,int> mp;
	mp['a'] = 10;
	mp['s'] = 14;
	mp['d'] = 22;
	mp['b'] = 1;
	mp['e'] = 11;
	mp<char, int>::iterator it = mp.find('a');
	mp.erase(it);//删除a 10
	mp.erase('b');//顺粗键为b的映射,即b 1
	it = mp.find('e');
	mp.erase(it, mp.end());//删除it之后的所有映射即e 11、s 14
	printf("%d\n", mp.size());//1
	mp.clear();
	printf("%d\n, mp.size());//0
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值