C ++ stl :: map find with structs

时间:2012-03-10 15:37:47

标签: c++ map

我有结构存储有关ARP数据包的信息,我需要保存ARP请求并一起回复数据包。我想为此使用std :: map,键和映射值是ARP结构,我将使用find运算符来对请求进行数学回复。

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

我想要描述的例子

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 *作为关键字,并且在找到它时需要另一个arp_packet *并使用ip_sender和ip_target匹配它?

1 个答案:

答案 0 :(得分:7)

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

你将在这里使用第三个参数:一个用于比较两个键的仿函数。

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()语义,它应该匹配<的数学属性,特别是反对称传递性