stl map 硬粪脱水
来源:互联网 发布:剑灵人族捏脸数据 编辑:程序博客网 时间:2024/06/10 20:07
基本性质:
关联式容器。
1.用iterator可修改value但无法修改key
2.key值提供快速查找log(N),且map默认从小到大排序过了
3.map(不存在相同key)注意multimap的存在,可存多个相同的key
4.推荐迭代器的宏定义:
Typedef map<int,int>::iterator ITER;
与其他容器优势:
1.map专门就是用来匹配的,
提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力
- 但是如果涉及到查找的话,map会更有优势,map自动关于第一关键字排序,查找效率会高点。
不过如果没有查找的需求的话,可能还是vector好点,毕竟map消耗的排序代价就没必要了。
插入
就搞定2种写法
Map<string,int>m;M["abc"]=123; //这种写法开销比较大,这个是先开辟abc的空间再赋值的M.insert(make_pair("abc",123));
排序
这里是对key
1.less/greater 按key首字母或数字排列
map<string, int, less<string> > name_score_map;
2.重载cmplen方法,我实现的必须保证每个string长度都不一样
,不然相同长度只能输出一个。
#include<cstdio>#include<iostream>#include<map>using namespace std;struct cmplen{ bool operator()(const string &s1,const string &s2) { return s1.length()<s2.length(); }};typedef pair<string,int> PAIR;ostream &operator<<(ostream &out,const PAIR &p){ return out<<p.first<<"\t"<<p.second;}typedef pair<string, int> PAIR;int main(){ map<string,int,cmplen>m; m["a"]=10; m["bd"]=20; m.insert(make_pair("cdsf",30)); m.insert(make_pair("ddf",40)); for(map<string,int>::iterator iter=m.begin(); iter!=m.end(); ++iter) { cout<<*iter<<endl; } return 0;}
这里是对value
#include<iostream>#include<map>#include<vector>#include<string>#include<algorithm>#define for0(i,j,k) for(int (i)=(j);(i)<(j);(i)++)#define for1(i,j,k) for(int (i)=(j);(i)<=(j);(i)++)using namespace std;typedef pair<string,int>PAIR;ostream &operator<<(ostream &out,const PAIR &p){ return out<<p.first<<"\t"<<p.second;}//法一struct cmp{ bool operator()(const PAIR &p1,const PAIR &p2) { return p1.second<p2.second; }};//法二bool cmp2(const PAIR &p1,const PAIR &p2){ return p1.second<p2.second;}int main(){ map<string,int>MAP; MAP["a"]=0; MAP["b"]=56; MAP.insert(make_pair("c",2)); vector<PAIR>v(MAP.begin(),MAP.end()); sort(v.begin(),v.end(),cmp());// sort(v.begin(),v.end(),cmp2);// 注意这两种方法 cmp() cmp2 struct的那个要带括号 for(int i=0; i!=v.size(); i++)cout<<v[i]<<endl; //这里不能用for0了 !=和 < 此处意义不一样 return 0;}
查找
三个方法
1.最简单的:
int x=MAP["abc"];//x是value "abc"是key若不存在key,则是初始化值
2.Find
Map<int,string>::iterator iter=m.find(key);If(iter==m.end(){}else{}
iter返回的数据类型是pair对象iter->first iter->second
3.Count
注意不是查找个数,这个也是存在性的查找
返回的是1or0
删除
Tip:
For(ITER iter=MAP.begin();iter!=MAP.end();){MAP.erase(iter++);}
注意不要写成
For(ITER iter=MAP.begin();iter!=MAP.end();iter++){MAP.erase(iter);}
这个会直接把迭代器删除
删除三种方法
1.
MAP.erase("bfff"); //直接删除key所对应的元素
2.
For(ITER it=MAP.find("bfff"));If(it!=MAP.end())MAP.erase(it);//可增加删除条件
3.
MAP.erase(iter1,iter2);//删除两个迭代器范围内元素
4.
MAP.clear();//全部清空
阅读全文
1 0
- stl map 硬粪脱水
- stl list 硬粪脱水
- 脱水缩合
- STL-map
- stl -map
- stl map
- STL Map
- STL---map
- STL(MAP)
- STL(map)
- STL--map
- STL map
- stl map
- STL map
- STL----map
- stl map
- STL map
- 【STL】map
- 二分法查找和拉格朗日插值查找
- 前端基础案例分享:制作百度换肤效果
- Machine Learning Algorithms: Which One to Choose for Your Problem
- ZOJ-1001
- 初识STM32 SPI
- stl map 硬粪脱水
- 按照Json的层级提取各个字段的方法
- 基于shiro的权限控制-001基本概念
- 八皇后问题 递归求解
- 宇宙十大不为人知的事情
- 文章标题
- 对uC/OS-II查找最高优先级就绪任务算法的理解
- LeetCode总结
- html中制作常用的表格-01