• STL map用法总结(multimap)


    2017-08-19 10:58:52 

    writer;pprp

    #include <map>
    #include <string>
    #include <iostream>
    #include <vector>
    #include <algorithm>
    
    using namespace std;
    typedef pair<int, string> PAIR;
    
    ostream & operator<<(ostream & out, const PAIR& p)
    {
        out << p.first << " " << p.second << endl;
        return out;
    }
    
    //函数对象,对()进行了重载
    struct CmpByValue
    {
        bool operator()(const PAIR&l, const PAIR&r)
        {
            return l.second < r.second;
        }
    };
    
    int main()
    {
        //数据插入
        map<int, string> mapStudent;
    
        mapStudent.insert(map<int, string>::value_type (1, "student_one"));
        mapStudent.insert(map<int, string>::value_type (2, "student_two"));
        mapStudent.insert(map<int, string>::value_type (3, "student_three"));
        mapStudent.insert(map<int, string>::value_type (4,"student_four"));
        mapStudent.insert(pair<int, string>(6, "student_six"));
        mapStudent.insert(make_pair(7, "student_seven"));
        mapStudent[5] = "student_five";
    
        //数据遍历
        //正向遍历
        map<int, string>::iterator  iter;
        for(iter = mapStudent.begin(); iter != mapStudent.end(); iter++)
        {
            cout<<iter->first<<" "<<iter->second<<endl;
        }
        //反向遍历
        map<int, string>::reverse_iterator it;
        for(it = mapStudent.rbegin(); it != mapStudent.rend() ; it++)
        {
            cout << it->first <<" " << it->second << endl;
        }
        //数组形式的遍历
        int nSize = mapStudent.size();
        for(int i = 0 ; i < nSize ; i++)
        {
            cout << mapStudent[i] << endl;
        }
        cout << endl;
    
        //数据的查找
        map<int, string>::iterator iter1;
    
        iter1 = mapStudent.find(1);
    
        if(iter1 != mapStudent.end())
        {
            cout << iter1->second << endl;
        }
        else
        {
            cout << "can't find it " << endl;
        }
    
        //判断是否存在这个key
        int judge = mapStudent.count(1);
    
        if(judge)
        {
            cout << "exist" << endl;
        }
        else
        {
            cout << "not exist"  << endl;
        }
    
        cout << endl;
    
        //用lower_bound进行查找
        map<int, string> :: iterator it2;
        it2 = mapStudent.lower_bound(2);
        cout << it2->second << endl;
        it2 = mapStudent.upper_bound(2);
        cout << it2->second << endl;
    
        pair<map<int, string>::iterator, map<int, string>::iterator> mapair;
        mapair = mapStudent.equal_range(1);
        //如果相等的话那就说明没有找到,如果不等就说明找到了
        if(mapair.first == mapair.second)
            cout << "can't find it" << endl;
        else
            cout << "the value of it is " << mapair.first->second << endl;
    
        //数据的清空与判空
    //    mapStudent.clear();
        if(!mapStudent.empty())
            cout << "not empty" << endl;
        else
            cout << "empty" << endl;
    
        //数据的删除
        map<int, string> :: iterator it3;
        it3 = mapStudent.find(1);
        mapStudent.erase(it3);
    
        for(it3 = mapStudent.begin(); it3 != mapStudent.end(); it3++)
            cout << it3->second << endl;
    
        judge = mapStudent.erase(2);
        if(judge)
        {
            cout << "delete successfully" << endl;
            for(it3 = mapStudent.begin(); it3 != mapStudent.end(); it3++)
            {
                cout << it3->second << endl;
            }
        }
    
        //排序(按照key的大小排序)
        //map<int, string, less<int> >是默认的升序
        //map<int, string, greater<int> >是可以构造的降序
    
        //排序(按照value的大小排序)
        vector <PAIR> sortByValue(mapStudent.begin(), mapStudent.end());
    
        sort(sortByValue.begin(), sortByValue.end(),CmpByValue());
    
        for(int i = 0 ; i < mapStudent.size(); i++)
        {
            cout << sortByValue[i]<< endl;
        }
        return 0;
    }

     另外multimap用法与map类似,函数什么的都一样,只是支持一个key对多个value

    /*
    name : usage of List
    writer : pprp
    declare : null
    date ; 2017/8/20
    */
    #include <bits/stdc++.h>
    
    using namespace std;
    
    void print(multimap<string,double>&k)
    {
          multimap<string, double>::iterator it;
          for(it = k.begin(); it != k.end() ; it++)
          {
                cout << it->first << " " << it->second << endl;
          }
    }
    
    int main()
    {
        multimap<string, double>mp;
        mp.insert(pair<string,double>("jack",300.23));
        mp.insert(make_pair("green",234.1));
        mp.insert(make_pair("red",234.132));
        mp.insert(make_pair("yellow",2342.1));
        mp.insert(make_pair("blue",234.11));
        mp.insert(make_pair("orange",2324.1));
    
        multimap<string, double>::iterator it;
        
        print(mp);
        
        mp.erase("jack");
        
        print(mp);
        
        it = mp.find("orange");
        if(it != mp.end())
        {
              cout << it->first << " " << it->second << endl;
        }
    
        return 0;
    }
  • 相关阅读:
    HTML基础 meta refresh 网页定时刷新
    HTML基础 meta name author 添加网页作者的信息
    HTML基础 mate refresh 5秒钟后,页面自动跳转
    HTML基础 marquee div块实现循环跑马灯的效果
    微服务jar包启动脚本
    怎么实现将word中的公式导入(或粘贴)到在线编辑中
    怎么实现将word中的公式导入(或粘贴)到网页编辑中
    Nginx实现浏览器端大文件分块上传
    javascript实现浏览器端大文件分块上传
    js实现浏览器端大文件分块上传
  • 原文地址:https://www.cnblogs.com/pprp/p/7395890.html
Copyright © 2020-2023  润新知