• C++STL—map的使用


    最近写的一道题用到了STL中的map,这部分内容之前没有系统学过,这里就简单归纳一下吧。

    资料来源:

    https://www.w3cschool.cn/cpp/cpp-fu8l2ppt.html

    http://c.biancheng.net/view/338.html

    https://blog.csdn.net/u010429424/article/details/75332700

    常用操作:

    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),速度很快。

      另外,这也意味着,map内部的元素是有序的!所以我们如果只是需要一个按key排序的输出的话,不需要对map进行排序,直接遍历输出即可。

      3.遍历:map的遍历是通过迭代器完成的:

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

  • 相关阅读:
    shell 读取文件内容 不以空格换行 再把每行的字符串切分取一部分
    Linux中basename和dirname命令的妙用
    Martiancloud 无注册中心微服务
    spring security自动续签功能
    访问c++类的私有成员
    Ubuntu 安装 docker 及 镜像加速
    谷歌浏览器表单自动填充颜色修改(antd)
    关于复制粘贴失效解决办法
    常见的HTTP状态码(HTTP Status Code)
    Linux 环境安装 MySQL
  • 原文地址:https://www.cnblogs.com/jiading/p/11089999.html
Copyright © 2020-2023  润新知