博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
STL-map
阅读量:5058 次
发布时间:2019-06-12

本文共 2300 字,大约阅读时间需要 7 分钟。

C++ STL-map

map内部数据组织:自建一颗红黑树(一种非严格意义上的平衡二叉树)

头文件:#include <map>

Operation:

  1. 自动建立Key-Value的键值对;
  2. 根据Key值快速查找记录,复杂度 \(O(log(N))\)
  3. 快速插入Key-Value记录;
  4. 快速删除Key-Value记录;
  5. 遍历所有记录。
1. 数据插入

Way1:用insert函数插入pair数据:

map
mInt;mInt.insert(pair
(1, "One"));mInt.insert(pair
(2, "Two"));mInt.insert(pair
(3, "Three"));

Way2:用数组方式插入数据:

map
mInt;mInt[1] = "One";mInt[2] = "Two";mInt[3] = "Three";
2. map的大小
int size = mInt.size()
3. 数据遍历

Way1:前向迭代器

map
::iterator iter;for(iter=mInt.begin(); iter!=mInt.end(); iter++){ cout<
first<<" "<
second<

Way2:反向迭代器

map
::iterator iter;for(iter=mInt.rbegin(); iter!=mInt.rend(); iter++){ cout<
first<<" "<
second<

Way3:数组形式

int size = mInt.size();for(int i=1; i<=size; i++){    cout<
<
4. 查找并获取map中的元素(包括判断这个关键字是否在map中出现)

Way1:count函数:判断关键字是否出现,但无法定位数据出现位置。若存在,返回1;否则返回0;

if(mInt.count(1) > 0){    cout<<"Yes"<

Way2:find函数:返回一个迭代器。数据出现时,返回数据所在位置的迭代器;否则返回的迭代器等于end函数返回的迭代器;

iter = mInt.find(1);if(iter != mInt.end())    cout<<"Find"<
second<
5. 删除键值对

移除map中某个条目用erase函数,其有三个重载函数

F1:iterator erase(iterator it) 删除一个条目对象

iter = mInt.find(1);mInt.erase(iter);

F2:通过关键字删除

int n = mInt.erase(1);  //如果删除则返回1,否则返回0

F3:iterator erase(iterator first, iterator last)删除一个范围

mInt.erase(mInt.begin(), mInt.end()) //相当于mInt.clear()
6. Swap

待补充

7. 排序

map中的元素自动按Key升序排序,所以不能对map用sort函数。STL默认采用小于号排序,比如上例关键字是int型,所以排序没有问题;如果关键字是结构体,就会使得排序出现问题。有两种解决办法。

Way1:小于号重载

typedef struct tagInfo{    int id;    string strName;    bool operator <(tagInfo const& _A) const{        if(id < _A.id) return true;        if(id == _A.id)            return strName.compare(_A.strName) < 0;        return false;    }}Info, *PInfo;int main(){    map
mapInfo;}

Way2:应用仿函数,这时结构体中没有直接的小于号重载

typedef struct tagInfo{    int id;    string strName;}Info, *PInfo;class sort{    public:    bool operator()(Info const &_A, Info const &_B) const{        if(_A.id < _B.id)            return true;        if(_A.id == _B.id)            return _A.strName.compare(_B.strName) < 0;        return false;    }   };int main(){    map
mapInfo;}

转载于:https://www.cnblogs.com/xxxxxxxxx/p/11063500.html

你可能感兴趣的文章
代码实现导航栏分割线
查看>>
Windows Phone开发(7):当好总舵主 转:http://blog.csdn.net/tcjiaan/article/details/7281421...
查看>>
一个mysql主从复制的配置案例
查看>>
大数据学习系列(8)-- WordCount+Block+Split+Shuffle+Map+Reduce技术详解
查看>>
【AS3代码】播放FLV视频流的三步骤!
查看>>
枚举的使用
查看>>
luogu4849 寻找宝藏 (cdq分治+dp)
查看>>
日志框架--(一)基础篇
查看>>
关于源程序到可运行程序的过程
查看>>
转载:mysql数据库密码忘记找回方法
查看>>
scratch少儿编程第一季——06、人在江湖混,没有背景怎么行。
查看>>
【贪心+DFS】D. Field expansion
查看>>
C# Async与Await的使用
查看>>
Mysql性能调优
查看>>
iOS基础-UIKit框架-多控制器管理-实例:qq界面框架
查看>>
IOS-每个程序员的编程之路上都应该看这11本书
查看>>
自定义tabbar(纯代码)
查看>>
小程序底部导航栏
查看>>
ibatis学习笔记
查看>>
18-ES6(1)
查看>>