簡體   English   中英

C ++ stl :: map使用結構查找

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM