zoukankan      html  css  js  c++  java
  • map映照容器(常用的使用方法总结)

      map映照容器的数据元素是由一个键值和一个映照数据组成的,键值和映照数据之间具有一一对应的关系。map与
    set集合容器一样,不允许插入的元素的键值重复。

    /*关于C++STL中map映照容器的学习,看别人的代码一百遍,不如自己动手写一遍。*/
    #include <map>
    #include <string>
    #include <iostream>
    using namespace std;
    
    struct myComp{
        bool operator () (const int &a,const int &b){
            return a>b;
        }
    }; 
    
    struct STUDENT{
        string name;
        float score;
        
        //重载“<”操作符,自定义排序规则
        bool operator < (const STUDENT &a) const{
        //按照score由大到小排列。从小到大,则使用>号
        return a.score<score; 
        } 
    }; 
    
    void print(map<string,float> m);
    void rprint(map<string,float> m);
    
    int main()
    {
        //map映照容器的创建
        map<string,float> m;//定义map对象,<>中前面是键值后面是映照数据,当前没有任何元素
        //插入元素,按键值的由小到大放入黑白树中
        m["Jack"]=98.5;
        m["Bomi"]=96.0;
        m["Kate"]=97.5;
        
        //前向遍历元素
        cout<<"前向遍历元素:
    ";
        print(m);
        //反向遍历元素
        cout<<"后向遍历元素:
    ";
        rprint(m);
        /*运行结果
        前向遍历元素:
        Bomi:96
        Jack:98.5
        Kate:97.5
        后向遍历元素:
        Kate:97.5
        Jack:98.5
        Bomi:96 
        */
        
        //元素的检索
        map<string,float>:: iterator it1;//定义一个同类型的迭代器来接受find()方法的返回值 
        it1=m.find("Jack");
        if(it1 != m.end()) cout<<"找到键值为Jack的元素
    ";
        it1=m.find("Mark");
        if(it1 == m.end()) cout<<"找不到键值为Mark的元素
    ";
        /*运行结果
        找到键值为Jack的元素
        找不到键值为Mark的元素 
        */
         
        //按照键值删除某一个等于该键值的元素
        cout<<"删除键值为Bomi的元素
    "; 
        m.erase("Bomi"); 
        print(m);
        /*运行结果
        删除键值为Bomi的元素
        Jack:98.5
        Kate:97.5 
        */
         
        //清空map映照容器
        m.clear();
        if(m.empty()) cout<<"该映照容器为空
    ";
        /*运行结果
        该映照容器为空 
        */
         
        /*同set一样,在使用insert()方法将元素插入到映照容器中的时候,会根据设定的比较规则进行排序,默认情况下
        按键值从小到大的顺序插入,但很多情况下,需要自己编写比较函数*/
        
        //如果不是结构体,则直接定义比较函数,重载"()"运算符,见main函数之前 
        map<int,char,myComp> mm;//使用自定义比较函数的时候记得在这进<>中 
        mm[25]='m';
        mm[28]='k';
        mm[10]='x';
        mm[30]='a';
        
        map<int,char>::iterator it2;
        for(it2=mm.begin(); it2 != mm.end(); it2 ++){
            cout<<(*it2).first<<":"<<(*it2).second<<endl; 
        }
        /*运行结果
        30:a
        28:k
        25:m
        10:x 
        */
         
        //如果是结构体,则直接把比较函数写在结构体内,见main函数之前
        STUDENT student;
        map<STUDENT,int> students;
        student.name="Jack";
        student.score=60;
        students[student]=25;
        
        student.name="Bimi";
        student.score=80;
        students[student]=10;
        
        student.name="Peti";
        student.score=66;
        students[student]=30;
    
        map<STUDENT,int>::iterator it3;//定义相应类型的迭代器遍历映照容器 
        for(it3=students.begin(); it3 != students.end(); it3 ++){
            cout<<((*it3).first).name<<" "<<((*it3).first).score<<" : "<<(*it3).second<<endl;
        } 
        /*运行结果
        Bimi 80 : 10
        Peti 66 : 30
        Jack 60 : 25 
        */
        return 0;
    }
    
    void print(map<string,float> m)
    {
        map<string,float>::iterator it;
        for(it=m.begin(); it != m.end(); it++){
            cout<<(*it).first<<":"<<(*it).second<<endl;
        }
    }
    
    void rprint(map<string,float> m)
    {
        map<string,float>::reverse_iterator rit; 
        for(rit=m.rbegin(); rit != m.rend();rit++){
            cout<<(*rit).first<<":"<<(*rit).second<<endl;
        }
    }
  • 相关阅读:
    The formatter threw an exception while trying to deserialize the message in WCF
    通过Web Deploy方式部署WCF
    The Managed Metadata Service or Connection is currently not available
    How to create Managed Metadata Column
    冒泡算法
    asp.net core 实战项目(一)——ef core的使用
    Vue学习笔记入门篇——安装及常用指令介绍
    Vue学习笔记入门篇——数据及DOM
    Vue学习笔记目录
    Chart.js在Laravel项目中的应用
  • 原文地址:https://www.cnblogs.com/wenzhixin/p/8511142.html
Copyright © 2011-2022 走看看