最近写的一道题用到了STL中的map,这部份内容以前没有系统学过,这里就简单概括一下吧。html
资料来源:c++
https://www.w3cschool.cn/cpp/cpp-fu8l2ppt.html数组
http://c.biancheng.net/view/338.htmlspa
http://www.javashuo.com/article/p-riqmtnng-mo.html.net
经常使用操做:指针
map<int ,string> maplive; 1.maplive.insert(pair<int,string>(102,"aclive")); 2.maplive.insert(map<int,string>::value_type(321,"hai")); 3, maplive[112]="April";//map中最简单最经常使用的插入添加!
2.查找:注意,map中元素是key-value配对的,要查找一个元素,须要提供它的key。map的内部是以平衡二叉树形式储存的,因此查找的速度为O(logn),速度很快。code
另外,这也意味着,map内部的元素是有序的!因此咱们若是只是须要一个按key排序的输出的话,不须要对map进行排序,直接遍历输出便可。htm
3.遍历:map的遍历是经过迭代器完成的:blog
1) 正向迭代器,定义方法以下:()排序
容器类名::iterator 迭代器名;
2) 常量正向迭代器,定义方法以下:
容器类名::const_iterator 迭代器名;
3) 反向迭代器,定义方法以下:
容器类名::reverse_iterator 迭代器名;
4) 常量反向迭代器,定义方法以下:
容器类名::const_reverse_iterator 迭代器名;
遍历过程:
map<int, int>::iterator iter; iter = _map.begin(); while(iter != _map.end()) { cout << iter->first << " : " << iter->second << endl; iter++; }
注意这里的map.end(),它和map.begin(),map.lower_bound(),map.upper_bound()同样,返回的是一个迭代器而不是元素自己。
*易错点:
map::lower_bound(key):返回map中第一个大于或等于key的迭代器指针
map::upper_bound(key):返回map中第一个大于key的迭代器指针
另外:
1.对于map中没有的key,若是访问的话返回的value为0;
2.map虽然有“下标”访问而且内部元素是有序的,但这不表明能够实现相似数组的下标访问,即访问第0个、第1个·····第n个元素。
3.map中的end()指向的不是最后一个元素,而是最后一个元素的下一个元素,这样是为了遍历时的方便,即便用while(iter != _map.end())的条件变量时能够遍历到最后一个元素。
举个例子:
#include<bits/stdc++.h> using namespace std; int main(){ map<int,int>testmap; testmap[0]=8; testmap[2]=9; //重要!end()指向的是下一个而非尾部 cout<<"begin's first:" <<testmap.begin()->first<<"begin's second:"<<testmap.begin()->second<<" end's first: "<<testmap.end()->first<<endl; cout<<testmap[1]<<endl; getchar(); }
结果为:
map<int ,string> maplive; 1.maplive.insert(pair<int,string>(102,"aclive")); 2.maplive.insert(map<int,string>::value_type(321,"hai")); 3, maplive[112]="April";//map中最简单最经常使用的插入添加!