C++ map使用自定义结构体作为key的插入、删除、查找和遍历(C++98)
C++ map使用自定义结构体作为key的插入、删除、查找和遍历(C++98)
在C++中,std::map是一个常用的关联容器,允许使用键值对存储数据。默认情况下,std::map使用小于运算符(<)比较键的大小关系。但是,如果要使用自定义结构体作为键,则需要提供自定义的比较函数。
以下是使用C++98实现的插入、删除、查找和遍历的示例代码:c++#include
typedef struct { std::string clientName; std::string clientCbAddr;} tag_ClientCBS;
// 自定义比较函数struct CompareStruct{ bool operator()(const tag_ClientCBS& lhs, const tag_ClientCBS& rhs) const { if(lhs.clientName == rhs.clientName && lhs.clientCbAddr == rhs.clientCbAddr) return false; else if(lhs.clientName < rhs.clientName) return true; else if(lhs.clientName == rhs.clientName && lhs.clientCbAddr < rhs.clientCbAddr) return true; else return false; }};
int main(){ // 创建map,使用自定义比较函数 std::map<tag_ClientCBS, int, CompareStruct> clientMap;
// 插入元素 tag_ClientCBS client1; client1.clientName = 'Alice'; client1.clientCbAddr = 'Address1'; clientMap[client1] = 1;
tag_ClientCBS client2; client2.clientName = 'Bob'; client2.clientCbAddr = 'Address2'; clientMap[client2] = 2;
// 删除元素 clientMap.erase(client2);
// 查找元素 tag_ClientCBS client3; client3.clientName = 'Alice'; client3.clientCbAddr = 'Address1'; std::map<tag_ClientCBS, int, CompareStruct>::iterator it = clientMap.find(client3); if(it != clientMap.end()) { std::cout << 'Found: ' << it->second << std::endl; } else { std::cout << 'Not found' << std::endl; }
// 遍历元素 for(it = clientMap.begin(); it != clientMap.end(); ++it) { std::cout << it->first.clientName << ' ' << it->first.clientCbAddr << ' ' << it->second << std::endl; }
return 0;}
在这个示例中:
- 我们定义了一个
tag_ClientCBS结构体作为std::map的键,值为int。2. 定义了CompareStruct结构体,并重载了()运算符,用于比较两个tag_ClientCBS对象的大小关系。3. 创建std::map对象时,将CompareStruct作为第三个模板参数传递,告诉std::map使用自定义的比较函数。
通过以上步骤,我们就可以在C++98中使用自定义结构体作为std::map的键,并进行插入、删除、查找和遍历操作。
原文地址: https://www.cveoy.top/t/topic/fdRo 著作权归作者所有。请勿转载和采集!