• STL中的map使用struct/class作为关键字的例子


    STL中的map使用struct/class作为关键字的例子 佟强 2008.11.5

        map的元素是由key和value两个分量组成的对偶(key,value)。key是键,value是与键key相关联的映射值。元素的键key是唯一的,给定一个key,就能唯一地确定与其相关联的另一个分量value。

        map中如果使用struct或者class作为key,需要实现复制构造函数,重载操作符“=”和“<”,下面代码举例说明如何使用class作为key。

    1. //MyMap2.cpp
    2. #include <iostream>
    3. #include <map>
    4. using namespace std;
    5. class MyIpNode{
    6. public:
    7.     unsigned long sourceIp;
    8.     unsigned long destIp;
    9.     unsigned char protocol;
    10.     MyIpNode(){
    11.         cout<<"------------默认构造函数"<<endl;
    12.         sourceIp=0;
    13.         destIp=0;
    14.         protocol=0;
    15.     }
    16.     MyIpNode(const MyIpNode& node){
    17.         cout<<"------------复制构造函数"<<endl;
    18.         sourceIp = node.sourceIp;
    19.         destIp = node.destIp;
    20.         protocol = node.protocol;
    21.     }
    22.     MyIpNode& operator =(const MyIpNode& node){
    23.         cout<<"------------操作符/"=/""<<endl;
    24.         sourceIp = node.sourceIp;
    25.         destIp = node.destIp;
    26.         protocol = node.protocol;
    27.         return *this;
    28.     }
    29.     friend bool operator<(const MyIpNode &a,const MyIpNode &b){
    30.         cout<<"------------操作符/"</""<<endl;
    31.         if(a.sourceIp<b.sourceIp){
    32.             return true;
    33.         }else if(a.sourceIp>b.sourceIp){
    34.             return false;
    35.         }else if(a.destIp<b.destIp){
    36.             return true;
    37.         }else if(a.destIp>b.destIp){
    38.             return false;
    39.         }else if(a.protocol<b.protocol){
    40.             return true;
    41.         }else if(a.protocol>b.protocol){
    42.             return false;
    43.         }else{
    44.             return false;
    45.         }
    46.     }
    47. };
    48. int main(int argc, char* argv[]){
    49.     map<MyIpNode,int> ipCounterMap;
    50.     MyIpNode myNode;
    51.     myNode.destIp=1;
    52.     myNode.sourceIp=5;
    53.     myNode.protocol=1;
    54.     ipCounterMap[myNode] = 10;
    55.     myNode.destIp=2;
    56.     myNode.sourceIp=6;
    57.     myNode.protocol=8;
    58.     ipCounterMap[myNode] = 20;
    59.     MyIpNode myNode2;
    60.     myNode2.destIp=1;
    61.     myNode2.sourceIp=5;
    62.     myNode2.protocol=1;
    63.     int a = ipCounterMap[myNode2];
    64.     cout<<a<<endl;
    65.     myNode2.destIp=2;
    66.     myNode2.sourceIp=6;
    67.     myNode2.protocol=8;
    68.     a = ipCounterMap[myNode2];
    69.     cout<<a<<endl;
    70.     map<MyIpNode,int>::const_iterator it;
    71.     MyIpNode node;
    72.     int counter;
    73.     for(it=ipCounterMap.begin(); it!=ipCounterMap.end(); it++){
    74.         node = it->first;
    75.         counter = it->second;
    76.         cout<<"/tIpNode("<<node.sourceIp<<", "<<node.destIp<<", "<<(int)(node.protocol)<<") = "<<counter<<endl;
    77.     }
    78.     return 0;
    79. }
  • 相关阅读:
    最常用的CountDownLatch, CyclicBarrier你知道多少? (Java工程师必会)
    浅谈Java中的Condition条件队列,手摸手带你实现一个阻塞队列!
    实习到公司倒闭,2019我的技术踩坑之路!
    Java中的等待唤醒机制—至少50%的工程师还没掌握!
    告别编码5分钟,命名2小时!史上最全的Java命名规范参考!
    解决SELinux阻止Nginx访问服务
    ZooKeeper使用入门
    JVM致命错误日志详解
    虚拟机中设置 CentOS 静态 IP
    Spring 核心技术(7)
  • 原文地址:https://www.cnblogs.com/zhangyunlin/p/6168124.html
Copyright © 2020-2023  润新知