C++stl::使用结构映射find

C++ stl::map find with structs

本文关键字:映射 find 结构 C++stl      更新时间:2023-10-16

我有一个存储ARP数据包信息的结构,我需要将ARP请求和回复数据包一起保存。我想使用std::map,键和映射的值是ARP结构,我会使用find运算符来计算带有请求的回复。

我的问题是如何说map::find只比较结构中的一些成员。

我试图描述的例子

struct arp_packet : public packet_info
{
    u_short type;   // 0x0001 request
                    // 0x0002 reply
    struct ipv4_address ip_sender;
    struct ipv4_address ip_target;
};

我会像这个一样把所有请求保存在地图上

std::map<arp_packet*, arp_packet*>

首先,映射的值为NULL,但如果收到回复数据包,我将使用find方法将其与请求匹配。

那么,我应该如何确保映射将arp_packet*作为关键字,并在find中使用另一个arp_packet*并使用ip_sender和ip_target进行匹配?

std::map最多接受4个模板参数(最后两个具有默认值)。

您将在这里使用第三个参数:一个用来比较两个键的函子。

struct ArpComparator {
  bool operator()(arp_packet* const left, arp_packet* const right) {
    // compare the fields you need here
  }
};
typedef std::map<arp_packet*, arp_packet*, ArpComparator> ArpMap;

在实现适当的operator()语义时要小心,它应该与<的数学性质相匹配,特别是反对称性传递性