C++ std::map自定义比较函数,仅比较结构体特定成员
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;
}
代码解释
- 定义结构体
tag_ClientCBS: 包含两个成员变量clientName和clientCbAddr,分别表示客户端名称和回调地址。 - 定义比较函数
CompareClientCBS: 这是一个仿函数(functor),重载了()运算符。该函数接受两个tag_ClientCBS结构体作为参数,并仅比较它们的clientCbAddr成员。 - 创建
std::map对象g_clientCBS_map: 使用自定义的比较函数CompareClientCBS实例化std::map,使得g_clientCBS_map在比较键值时只考虑clientCbAddr成员。 - 插入元素: 创建三个
tag_ClientCBS对象,并将它们插入到g_clientCBS_map中。 - 输出结果:
g_clientCBS_map的大小为2,因为client1和client3的clientCbAddr相同,被视为同一个键。
总结
通过自定义 std::map 的比较函数,我们可以实现只比较结构体中特定成员的功能,从而满足特定的业务需求。
原文地址: https://www.cveoy.top/t/topic/fd5v 著作权归作者所有。请勿转载和采集!