C++ map用法总结

本文详细介绍了C++ STL中的map容器,它用于实现一对一映射,内部基于红黑树实现自动排序。map的构造、插入元素(insert函数和直接赋值)、查找(find函数)、删除(erase函数)以及获取大小(size函数)等基本操作进行了阐述,适合C++初学者和进阶者学习。
摘要由CSDN通过智能技术生成

1.map简介

map是STL的一个关联容器,提供一对一的hash
第一个可以称为关键字(key),每个关键字只能在map中出现一次;
第二个可以成为该关键字的值(value);
map以模板(泛型)方式实现,可以存储任意类型的数据,包括使用者自定义的数据类型。map主要用于资料一对一映射(one-to-one)的情况,map内部的实现自建一棵红黑树,这棵树有对数据自动排序的功能。在map内部所有的数据都是有序的。例如一个班级中,每个学生的学号和他的姓名就存在一对一的映射关系。
在这里插入图片描述

2.map的功能

自动建立key-value的对应。key和value可以是任意你需要的类型,包括自定义类型。

3.使用map

使用map首先要引入头文件
#include
map对象是模板类,需要关键字和存储对象两个模型参数:
std:map<int,string> personnel;
这样就定义了一个用int作为索引,并拥有相关联的指向string的指针
为了使用方便可以对模板类进行类型定义:
typedef map<int,string> UDT_MAP_INT_CSTRING;
UDT_MAP_INT_CSTRING enumMap;

4.map的构造函数

map共提供了六个构造函数,我们常用如下方法构造一个map:
map<int,string> mapStudent;

5.插入元素

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

//第一种插入方法,用insert函数 插入pair
mapStudent.insert(pair<int,string>(000,"student_zero"));

//第二种插入方法,用insert函数插入 value_type数据
mapStudent.insert(map<int,string>::value_type(001,"student_one"));

//第三种插入方法 用array插入
mapStudent[123]="student_first";
mapstudent[456]="student_second";

用insert插入数据时,当map中有这个关键字时,insert操作是不能再插入数据的,但是用数组则可以覆盖以前关键字对应的值。程序说明:

mapStudent.insert(map<int,string>::value_type(001,"student_one"));

mapStudent.insert(map<int,string>::value_type(001,"student_two"));

执行上面两句后,map中001关键字对应的值是”student_one“,第二条语句不生效

6.查找元素

当所查找的关键key出现时,返回数据所在对象的位置,如果没有,返回的iter与end函数的值相同。

//find返回迭代器指向当前查找元素的位置否则返回map::end()位置
iter = mapStudent.find("123");
if(iter!=mapStudent.end())
	cout<<"Find,the value is"<<iter->second<<endl;
else
	cout<<DO NOT find<<endl;

7.删除与清空元素

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

//用关键字删除
int n = mapStudent.erase("123");//删除了返回1否则返回0

//用迭代器范围删除
mapStudent.erase(mapStudent.begin(),mapStudent.end());
//等同于mapStudent。clear()

8.map的大小

获知插入了多少数据,用size函数

int nSize = mapStudent.size();

9.map基本操作函数

C++ maps是一种关联式容器,包含"关键字/值"对

begin() //返回指向map头部的迭代器
clear() //删除所有元素
count() //返回指定元素出现的次数
empty() //如果map为空返回true
end() // 返回指向map末尾的容器/最后一个元素的下一个位置
equal_range() //返回特殊条目的迭代器对
erase() // 删除一个元素
find() //查找一个元素
get_allocator() //返回map的配置器
insert() //插入元素
key_comp() //返回比较元素key的函数
lower_bound() //返回键值>=给定元素的第一个位置
max_size() //返回可以容纳的最大元素个数
rbegin() //返回一个指向map尾部的逆向迭代器
rend() //返回一个指向map头部的逆向迭代器
size() //返回map中元素的个数
swap() //交换两个map
upper_bound() //返回键值>给定元素的第一个位置
value_comp() //返回比较元素value的函数

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值