C++ 使用自定义比较函数实现 std::map 以结构体为键,并以结构体中两个字段作为唯一标识
C++ 使用自定义比较函数实现 std::map 以结构体为键,并以结构体中两个字段作为唯一标识
本文将介绍如何使用自定义比较函数 clientCompareKey, 使 std::map 以结构体 tag_ClientCBS 为键, 并以结构体中的 clientCbAddr 和 clientName 两个字段作为唯一标识进行排序和查找。
1. 定义结构体 tag_ClientCBS:
typedef struct
{
HelloWorldPtr clientPtr;
std::string clientName;
std::string clientCbAddr;
}tag_ClientCBS;
2. 实现自定义比较函数 clientCompareKey:
struct clientCompareKey {
bool operator()(const tag_ClientCBS& client1, const tag_ClientCBS& client2) const {
if (client1.clientCbAddr != client2.clientCbAddr) {
return client1.clientCbAddr < client2.clientCbAddr;
}
return client1.clientName < client2.clientName;
}
};
这个函数首先比较 clientCbAddr 字段,如果相同再比较 clientName 字段,从而实现以这两个字段作为唯一标识。
3. 创建以 tag_ClientCBS 为键的 std::map:
static std::map<tag_ClientCBS, int, clientCompareKey> g_clientCBS_map;
这里使用自定义的比较函数 clientCompareKey 作为 std::map 的第三个模板参数,来创建一个以 tag_ClientCBS 作为键的有序映射。
现在,g_clientCBS_map 就是一个以 tag_ClientCBS 作为键的有序映射,它使用 clientCompareKey 来比较键的唯一性, 可以根据 clientCbAddr 和 clientName 两个字段进行高效的排序和查找。
原文地址: https://www.cveoy.top/t/topic/fdHd 著作权归作者所有。请勿转载和采集!