zoukankan      html  css  js  c++  java
  • map存放结构体、类的例子

    面试中问到了一个问题,定义一个map<A,int>,key是一个类,value是一个int型值,问这个类有什么限制吗?

    当时没想出来,回头自己试的时候确实编译不过,报的错误是

    error: no match for ‘operator<’ (operand types are ‘const A’ and ‘const A’)
    { return __x < __y; }

    后来想了想,换成结构体呢,结果报错也是一样,之后就突然想到map它是内部有序,做了排序机制的,所以你得定个规则让它有序,所以得重载operator < 运算符函数,然后写个规则给它(map也有无序的,unordered_map)。

    写个例子:

     1 #include <iostream>
     2 #include <map>
     3 using namespace std;
     4 
     5 /*map内部有排序机制,它是有序的,当map存结构体或者存类的时候,要重载operator < 运算符函数
     6 */
     7 
     8 class A{
     9     int id;
    10     string name;
    11 public:
    12     virtual void test(){
    13         cout << "A::test()" << endl;
    14     }
    15     bool operator < (const A &a) const
    16     {
    17         return id < a.id;
    18     }
    19 };
    20 
    21 struct B{
    22     int id;
    23     string name;
    24     B(){}
    25     B(int x,string y):id(x),name(y){}
    26     bool operator < (const B &a) const
    27     {
    28         return id < a.id;
    29     } 
    30 };
    31 
    32 int main(){
    33     //map放类
    34     map<A,int> tmap;
    35     A a;
    36     int num = 10;
    37     tmap[a] = num;
    38 
    39 /*--------------------------------------------------------------------------------*/
    40     //map放结构体
    41     // map<B,int> bmap;
    42     // for (int i = 0; i < 10; i++) {
    43     //     bmap.insert(pair<B, int>(B(i,"name"+i),i));
    44     // }
    45  
    46     // for (auto it = bmap.begin(); it != bmap.end(); ++it) {
    47     //     cout << it->first.name  << "-->" << it->second << endl;
    48     // }
    49 
    50     return 0; 
    51 }

    OK!这样问题就解决了

  • 相关阅读:
    Ubuntu16.04 配置SSH无密码登录
    Ubuntu16.04 配置SSH无密码登录
    Ubuntu 16.04 安装JDK
    Ubuntu 16.04 安装JDK
    8.1 mnist_soft,TensorFlow构建回归模型
    8.1 mnist_soft,TensorFlow构建回归模型
    Ubuntu16.04 安装Python开发环境
    Ubuntu16.04 安装Python开发环境
    HTML学习笔记(一) 基本介绍
    CSS学习笔记(五) 过渡与动画
  • 原文地址:https://www.cnblogs.com/Hwangzhiyoung/p/9566127.html
Copyright © 2011-2022 走看看