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;
}

原文链接: https://www.cnblogs.com/bugutian/p/13163143.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    C++ std::map如何插入自定义的KEY

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/199199

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月12日 下午8:04
下一篇 2023年2月12日 下午8:04

相关推荐