文档介绍:该【CC++—STL中Map用法 】是由【小小布】上传分享,文档一共【3】页,该文档可以免费在线阅读,需要了解更多关于【CC++—STL中Map用法 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。CC++—STL中Map⽤法
C/C++—STL中Map⽤法
Map是什么
Map是STL中的⼀个关联容器,Key–Value的存储形式。每个Key只能对应⼀个Value。具有快速查找,内部实现是⼀个红⿊⼆叉树。特点
可以增加和删除节点对迭代器的影响较⼩,仅可以修改Key对应的Value值。
Map的功能
⾃动建⽴Key-Value的对应,Key和Value可以是任意类型。查找的复杂度为Log(N)(1000条记录最多10次)
快查快删根据Key修改Value
Map的使⽤
需要导⼊头⽂件
#include<map>//STL头⽂
map对象是⼀个模版类,需要关键字和存储对象两个模版参数
std::map<int,std::string>person;
可以对模版进⾏类型定义使其使⽤⽅便
typedefstd::map<int,std::string>MAP_INI_STRING;
MAP_INI_STRINGperson;
Map的构造
Map的构造函数系统提供啦6个,不同的构造函数涉及到内存的分配,可以根据⾃⼰实际的使⽤场景,来选取不同的构造⽅法。最通⽤的构
造函数就是
std::map<int,std::string>mapPerson;
Map常⽤的数据插⼊⽅法
1、insert函数插⼊pair数据
std::map<int,std::string>mapPerson;
(pair<int,string>(1,"Jim"));
2、insert函数插⼊value_type数据
(std::map<int,std::string>::value_type(2,"Tom"));
3、⽤数组⽅式插⼊数据
mapPerson[3]="Jerry";
三种⽅法都是插⼊操作区别:
inster插⼊操作如果key已经存在则不会做任何处理,
数组⽅式插⼊如果Key存在则更新Key对应的Value,如果不存在则添加新的Key–Value
Map数据的遍历
三种最常⽤的遍历⽅法:
1、前向迭代器
std::map<int,std::string>::iteratorit;
std::map<int,std::string>::iteratoritEnd;
it=();
itEnd=();
while(it!=itEnd){
cout<<it->first<<''<<it->second<<endl;
it++;
}
2、反向迭代器
std::map<int,string>::reverse_iteratoriter;
for(iter=();iter!=();iter++)
cout<<iter->first<<""<<iter->second<<endl;
3、数组形式
(std::map<int,std::string>::value_type(1,"Tom"));
mapPerson[2]="Jim";
mapPerson[3]="Jerry";
intnSize=();
for(intn=1;n<=nSize;n++)
qDebug()<<QString::fromStdString(mapPerson[n]);
三种都是遍历,建议使⽤前向迭代器,慎⽤使⽤数组形成(⾓标开始位置谨慎)。
Map中查询元素
1、cout函数存在返回1不存在返回0内部实现是通过find函数
2、find函数可以定位出现的位置,返回数据所在位置的迭代器。
3、使⽤upper_bound函数和lower_bound函数如map中存在key(1,2,3,4),
则lower_bound(2)返回值2,upper_bound(2)返回值3可以根据这两个的返回值是否相等来判断是否存在
Map中删除元素
移除某个元素使⽤erase();
成员⽅法如下:
iteratorerase(iteratorit);//通过⼀个条⽬对象删除
iteratorerase(iteratorfirst,iteratorlast);//删除⼀个范围
size_typeerase(constKey&key);//通过关键字删除
clear();//((),());
注意:如果map⾥⾯存储的是对象指针,在⽤户erase()需要⽤户⼿动的管理内存,erase⽅法只是将对象从Map中移除
Map中的swap⽤法
map中的swap不是⼀个容器中的元素交换,⽽是两个容器所有元素的交换。
注意:map中的erase以及clear,不会⽴马回收内存,map有较为科学的内存回收机制。可以认为clear以及erase的空间,map会在合适
的时间回收。
Map中排序
。。。。。
Map的基本操作函数
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的函数