C++ map使用自定义结构体作为key的插入、删除、查找和遍历(C++98)

在C++中,std::map是一个常用的关联容器,允许使用键值对存储数据。默认情况下,std::map使用小于运算符(<)比较键的大小关系。但是,如果要使用自定义结构体作为键,则需要提供自定义的比较函数。

以下是使用C++98实现的插入、删除、查找和遍历的示例代码:c++#include #include #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;}

在这个示例中:

  1. 我们定义了一个tag_ClientCBS结构体作为std::map的键,值为int。2. 定义了CompareStruct结构体,并重载了()运算符,用于比较两个tag_ClientCBS对象的大小关系。3. 创建std::map对象时,将CompareStruct作为第三个模板参数传递,告诉std::map使用自定义的比较函数。

通过以上步骤,我们就可以在C++98中使用自定义结构体作为std::map的键,并进行插入、删除、查找和遍历操作。

C++ map使用自定义结构体作为key的插入、删除、查找和遍历(C++98)

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

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