C++stl::使用结构映射find
C++ stl::map find with structs
我有一个存储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()
语义时要小心,它应该与<
的数学性质相匹配,特别是反对称性和传递性
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 将函数类成员映射到类本身内部
- 如何在 C# 中映射双 C 结构指针?
- 如何在C++中使用结构生成映射
- 使用std::函数映射对象方法
- 如何加载(或映射)文件部分的最大大小,但适合在Windows上的RAM
- C++映射分割错误(核心转储)
- 内联映射初始化的动态atexit析构函数崩溃
- 使用"std::unordereded_map"映射到"std::list"对象
- 如何从多映射中删除特定的重复项
- 为什么映射插入和 map.find() 的单次迭代比插入和 map.find() 的两次单独迭代慢得多
- 为什么要对 map::find 应用不存在的键将返回一个C++中第一个值映射大小的迭代器
- 在无序映射<字符串上使用 find(),向量<string>>与 C++ 中的有序映射花费相同的时间
- 多映射less_equal导致错误的 find() 结果
- 使用结构作为映射的键和值.find() 操作给出错误
- C++stl::使用结构映射find
- 如何在int,string类型的映射上使用find
- 用于成员函数映射的c++find()