C++ std::map自定义比较函数,仅比较结构体特定成员

本文介绍如何使用C++98标准,自定义std::map的比较函数,实现只比较结构体中特定成员(clientCbAddr)的功能。

代码实现

#include <iostream>
#include <map>
#include <string>

typedef struct 
{
    std::string   clientName;
    std::string   clientCbAddr;
}tag_ClientCBS;

struct CompareClientCBS
{
    bool operator()(const tag_ClientCBS& c1, const tag_ClientCBS& c2) const
    {
        return c1.clientCbAddr < c2.clientCbAddr;
    }
};

static std::map<tag_ClientCBS, int, CompareClientCBS> g_clientCBS_map;

int main()
{
    tag_ClientCBS client1;
    client1.clientName = 'Client1';
    client1.clientCbAddr = 'Addr1';
    g_clientCBS_map[client1] = 1;

    tag_ClientCBS client2;
    client2.clientName = 'Client2';
    client2.clientCbAddr = 'Addr2';
    g_clientCBS_map[client2] = 2;

    tag_ClientCBS client3;
    client3.clientName = 'Client3';
    client3.clientCbAddr = 'Addr1'; // Same clientCbAddr as client1
    g_clientCBS_map[client3] = 3;

    std::cout << 'Size of map: ' << g_clientCBS_map.size() << std::endl;

    return 0;
}

代码解释

  1. 定义结构体 tag_ClientCBS: 包含两个成员变量 clientNameclientCbAddr,分别表示客户端名称和回调地址。
  2. 定义比较函数 CompareClientCBS: 这是一个仿函数(functor),重载了 () 运算符。该函数接受两个 tag_ClientCBS 结构体作为参数,并仅比较它们的 clientCbAddr 成员。
  3. 创建 std::map 对象 g_clientCBS_map: 使用自定义的比较函数 CompareClientCBS 实例化 std::map,使得 g_clientCBS_map 在比较键值时只考虑 clientCbAddr 成员。
  4. 插入元素: 创建三个 tag_ClientCBS 对象,并将它们插入到 g_clientCBS_map 中。
  5. 输出结果: g_clientCBS_map 的大小为2,因为 client1client3clientCbAddr 相同,被视为同一个键。

总结

通过自定义 std::map 的比较函数,我们可以实现只比较结构体中特定成员的功能,从而满足特定的业务需求。

C++ std::map自定义比较函数,仅比较结构体特定成员

原文地址: https://www.cveoy.top/t/topic/fd5v 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录