C++map

1、map简介
map是STL中的一个关联容器,提供一对一的hash,其中的每一个元素由一对 键-值(key-value)对组成。

  • key在map中只能出现一次
  • 每个key对应于一个value值

map以模板(泛型)方式实现,可以存储任意类型的数据,包括使用自定义的类型。map主要用于一对一映射(one-to-one)的情况,map内部的实现自建一颗红黑树。这棵树具有对数据自动排序的功能。

在这里插入图片描述

2、map的功能
当将一对key-value插入到map中时,就自动建立起key-value的一一对应。key和value可以是任意类型,包括自定义类型

3、使用map
头文件:
#include
初始化可如下
eg:
map< int, string > mp;
这样定义了一个key为int类型,value为string类型的map容器了

经常使用上述方法初始化map:
map<key, value> mp;

初始化操作:

//1、直接赋值
map<int,string> mp;
mp[001]="student1";

//2、insert函数
mp.insert({001,"student1"});
mp.insert(pair<int,string>(002,"student2"));

//3、列表初始化(适用于C++11及以上版本,低于则无法使用)
map<int,string> mp={{001,"student1"},{002,"student2"},{003,"student3"}};

4、map的插入操作

//定义一个map对象
map<int,string> mp;

//使用pair
mp.insert(pair<int,string>(000,"student");

//使用value_type
mp.insert(map<int,string>::value_type(001,"student1");

//使用赋值
mp[123]="student123";  //key=123,value="student123"
mp[456]="student456";  //key=456,value="student456"

以上三种方法都可以实现数据的插入,其中第一、第二种方法完全一样,使用insert函数插入数据,在数据的插入上设计到集合的唯一性,即当map中有这个关键字(key)时,insert操作是不能再插入数据的,但是用数组方式插入数据的话,会覆盖以前该关键字(key)对应的值(value)。

mp.insert(map<int,string>::value_type(001,"student1"));

mp.insert(map<int,string>::value_type(001,"student2"));

执行上述语句后,map中对应的键值对(key-value)为(001,“student1”),说明第二条语句没有生效。那么我们如何知道insert语句是否插入成功?可以用pair来获得是否插入成功,程序如下:

// 构造定义,返回一个pair对象
pair<iterator,bool> insert (const value_type& val);
 
pair<map<int, string>::iterator, bool> Insert_Pair;
 
Insert_Pair=mp.insert(map<int,string>::value_type (001, "student_one"));
 
if(!Insert_Pair.second)
    cout << ""Error insert new element" << endl;

5、查找元素
当所查找的关键字key在map中存在,则返回其所在位置。否则返回末位置end()

//find返回迭代器指向当前查找元素的位置,失败则返回map::end()位置
iter=mp.find("123");

if(iter!=mp.end())
	cout<<"value="<<iter->second<<endl;
else
	cout<<"fail"<<endl;

6、删除和清空元素

//迭代器删除
iter =mp.find("123");
mp.erase(iter);

//关键字删除
int n=mp.erase("123");   //如果删除了返回1,否则返回0

//使用迭代器范围删除: 清空整个map.相当于mp.clear();
mp.erase(mp.begin(),mp.end());

7、map的大小

int nSize()=mp.size();

8、map的嵌套使用

map<int,map<int,vector<string>>> mp;
mp[0][0].push_back(1);

9、map的操作函数
begin() 返回指向map头部的迭代器
clear() 删除map中所有元素
count() 接受键作为参数,返回具有该键的元素的数目
empty() 若map为空则返回true
end() 返回指向map末尾的迭代器
erase() 删除一个元素
find() 查找一个元素
insert() 插入元素
key_comp() 返回比较元素key的函数
value_comp() 返回比较value的函数
lower_bound() 返回第一个键值大于等于给定键值的元素的位置
upper_bound() 返回第一个键值大于给定键值的元素的位置
max_size() 返回可以容纳的最大元素个数
rbegin() 返回一个指向map()尾部的逆向迭代器
rend() 返回一个指向map()头部的逆向迭代器
size() 返回元素个数
swap() 交换两个map

本文为阅读以下链接的笔记,原文章请点击此处观看

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值