zoukankan      html  css  js  c++  java
  • map映照容器

      map映照容器的元素数据是一个键值和一个映照数据组成的,键值与映照数据之间具有一一映照的关系。
      map映照容器的数据结构是采用红黑树来实现的,插入键值的元素不允许重复,比较函数只对元素的键值进行比较,元素的各项数据可通过键值检索出来。
      使用map容器需要头文件包含语句“#include<map>”。

    1.map创建、元素插入、和遍历访问:

    创建map对象,键值与映照数据的类型由自己定义。在没有指定比较函数时,元素的插入位置是按照值由小到大插入到红黑树中去的,这点和我们之前讲的set一样。

     1 #include<iostream>
     2 #include<cstring> 
     3 #include<map> 
     4 using namespace std;
     5 
     6 int main(){
     7     map<string,float> m;//定义map对象,当前没有任何元素 
     8     m["Jack"]=98.5;//插入元素,按键值由小到大放入 
     9     m["Bomi"]=96.0;
    10     m["Kate"]=97.5;
    11     
    12     map<string,float>::iterator it;//定义前向迭代器 
    13     for(it=m.begin();it!=m.end();it++){//遍历输出键值与映照数据 
    14         cout<<(*it).first<<" : "<<(*it).second<<endl;
    15     }
    16     return 0;
    17 }

    运行结果:

    Bomi : 96

    Jack  : 98.5

    Kate :97.5

    2.删除元素:

    与set一样,map映照容器的erase()函数可以删除某个迭代器位置上的元素、等于某个键值的元素、一个迭代器区间上的所有元素,当然,也可以使用clear()方法清空map映照容器。

     1 #include<iostream>
     2 #include<cstring>
     3 #include<map>
     4 using namespace std;
     5 
     6 int main(){
     7     map<int,char> m;
     8     map[25]='m';
     9     map[28]='k';
    10     map[10]='x';
    11     map[30]='a';
    12     
    13     m.erase(28);//删除键值为28的元素 
    14     map<int,char>::iterator it;
    15     for(it=m.begin();it!=m.end();it++){
    16         cout<<(*it).first<<" : "<<(*it).second<<endl;
    17     } 
    18     return 0;
    19 } 

    运行结果:

    10 : x

    25 : m

    30 : a

    3.元素反向遍历:

    与set一样,我们可以使用反向迭代器reverse_iterator反向遍历map映照容器中的数据,它需要rbegin()和rend()来指出反省遍历的起始位置和终止位置。

     1 #include<iostream>
     2 #include<cstring>
     3 #include<map>
     4 using namespace std;
     5 
     6 int main(){
     7     map<int,char> m;
     8     map[25]='m';
     9     map[28]='k';
    10     map[10]='x';
    11     map[30]='a';
    12     
    13     map<int,char>::reverse_iterator it;//定义反向迭代器 
    14     fro(it=m.rbegin();it!=m.rend();it++){//反向遍历 
    15         cout<<(*it).first<<" : "<<(*it).second<<endl; 
    16     }
    17     return 0;
    18 } 

    运行结果:

    30 : a

    28 : k

    25 : m

    10 : x

    4.元素的搜索:

     依旧与set一样,使用find()来搜索某个键值,如果搜索到了,则返回该键值所在的迭代器位置,否则,返回end()迭代器位置。

     1 #include<iosteram>
     2 #include<cstring>
     3 #include<map>
     4 using namespace std;
     5 
     6 int main(){
     7     map<int,char> m;
     8     m[25]='m';
     9     m[28]='k';
    10     m[10]='x';
    11     m[30]='a';
    12     
    13     map<int,char>::iterator it;
    14     it=find(28);//搜索键值为28的元素 
    15     if(it!=m.end()){//找到 
    16         cout<<(*it).first<<" : "<<(*it).second<<endl;
    17     }
    18     else{ 
    19         cout<<"not found it"<<endl;
    20     }
    21     return 0;
    22 }

    运行结果:

    28 : k

      直观来说,map 容器区别于 set 容器的一个主要特性在于,map 是处理带有键值的记录型元素数据的快速插入、删除 和检索,而 set 则可看成是对单一数据的处理。map 将一个元素划分出键值部分,并按这个局部的键值指定整个元素的函数比较规则,来建立容器的数据分布。map 的元素键值是唯一的,不允许重复的元素键值插入。 set 和 map 都是泛型库对二叉树的一个泛化。
        
        map 缺点:map是比较高级的用法了,适合用 list , vector 就能完成的操作,就不需要用到 map 。
        map 优点:相比 set ,map 可处理带有键值的记录型数据的快速插入、删除和检索。检索的速度也是非常快的。

  • 相关阅读:
    禁止chrome浏览器自动更新检查
    第 3 章 容器
    在CentOS安装配置Nginx基于Docker容器方式
    CentOS各版本系统ISO镜像下载地址
    CentOS6虚拟机安装部署ActiveMQ 5.14
    Elasticsearch 实战与原理解析
    Elasticsearch 实战与原理解析
    Elasticsearch 实战与原理解析
    Elasticsearch源码解析与优化实战:附录 A 重大版本变化
    jmeter(一)安装与配置,ant和jenkins接口测试自动化
  • 原文地址:https://www.cnblogs.com/Kiven5197/p/5543823.html
Copyright © 2011-2022 走看看