[英]C++ stl::map find with structs
我有存儲有關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進行匹配?
一個std::map
最多接受4個模板參數(最后2個具有默認值)。
您將在此處使用第3個參數:一個函子,用於比較兩個鍵。
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()
語義時要小心,它應該與<
的數學屬性匹配,尤其是反對稱性和可傳遞性 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.