zoukankan      html  css  js  c++  java
  • C++ std::map如何插入自定义的KEY

    初学C++的小伙伴会问如果std::map中要使用自定义的key怎么办?
    答案重载描述符 "<",重载时请注意,当元素相等的时候要返回false.否则,插入相同的元素后,会生成多条记录。而且使用find函数找不到自己的之前插入的key。

    #include <stdio.h>
    #include <map>
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    struct A {
        int a;
        int b;
        int c;
        A(const int& a,const int& b,const int& c) {
           this->a = a; 
           this->b = b; 
           this->c = c; 
        }
        friend bool operator <(const A& l, const A& r);
    };
    void print (A tmp) {
        cout << "<" << tmp.a << "," <<  tmp.b << "," << tmp.c << ">";
    }
    
    bool operator <(const A& l, const A& r)
    {
       if (l.a != r.a) { return l.a < r.a;}
       if (l.b != r.b) { return l.b < r.b;}
       if (l.c != r.c) { return l.c < r.c;}
       return false;
    }
    
    int main()
    {
        A m(1,2,3);
        A n(1,2,3);
        A o(1,2,3);
        map<A,int> ss;    
        ss.insert(std::pair<A,int>(m,1));
        ss.insert(std::pair<A,int>(n,2));
        ss.insert(std::pair<A,int>(o,3));
        map<A,int>::iterator iter  = ss.begin();
        while (iter != ss.end())
        {
            cout << "KEY:";
            print(iter->first); 
            cout << ",VALUE:" << iter->second << endl; 
            iter ++;
        }
        iter = ss.find(m);
        if (iter != ss.end()) {
            cout << "Has find key." << endl;
            cout << "KEY:";
            print(iter->first); 
            cout << ",VALUE:" << iter->second << endl; 
        }else{
            cout << "Can't find key." << endl;
        }
        map<int,int> kk;
        kk.insert(std::pair<int,int>(1,1));
        kk.insert(std::pair<int,int>(1,2));
        kk.insert(std::pair<int,int>(1,3));
        map<int,int>::iterator iter2  = kk.begin();
        while (iter2 != kk.end())
        {
            cout << "KEY:" << iter2->first << ",VALUE:" << iter2->second << endl; 
            iter2 ++;
        }
        
        return 0;
    }
    
    
  • 相关阅读:
    浅谈MyBatis-Plus学习之条件构造器 EntityWrapper
    浅谈MyBatis-Plus学习之插件扩展
    [XSS防御]HttpOnly之四两拨千斤
    [PHP防火墙]输入内容存在危险字符,安全起见,已被本站拦截
    [思路笔记]WEB安全之漏洞挖掘
    通过TleChat插件一键Getshell
    云服务器上安装MSF环境
    (vshadow)Volume Shadow在渗透测试中的利用
    一个帖子csrf的例子
    yuyuecms 1.2文件删除漏洞
  • 原文地址:https://www.cnblogs.com/bugutian/p/13163143.html
Copyright © 2011-2022 走看看