我有结构存储有关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匹配它?
答案 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()
语义,它应该匹配<
的数学属性,特别是反对称和传递性。