C++STL—map的使用

最近写的一道题用到了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

经常使用操做:指针

  1. 添加元素:能够用Insert,也能够下标添加

 

   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中最简单最经常使用的插入添加!

相关文章
相关标签/搜索