DHCP指纹的HashMap实现

HashMap implementation for DHCP fingerprints

本文关键字:实现 HashMap 指纹 DHCP      更新时间:2023-10-16

我正在C++中实现哈希映射。我是C++新手。我必须存储这样的值。

摩托罗拉=01 33 03 06 15 26 28 51 58 59

Windows Phone=01 15 03 06 44 47 31 33 121 249 252 43

我有将近50000个这样的价值观。我该如何实现?

您可以使用std::map来实现此目的。

std::map<string, vector<int> > map_Data;

在这里,每个映射元素由一对string和一个vector <int>组成。

string --> vector<int>

然后,在添加到map之前,必须首先创建一个整数的vector。如果你没有不断搜索值的应用程序,你甚至可以使用string作为值(但它也有自己的缺点,因为存储strings比ints昂贵)

然后它会看起来像:

std::map<string, string > map_Data;

当然,这取决于您的应用程序和读取数据的方式。您可以使用列表数组将其实现为自己的哈希映射。但这会使事情复杂化。

编辑:

#include <map>
#include <iostream>
#include <vector>
using namespace std;
int main(int argc, char* argv[]) {
std::map<std::string, vector<int> > data;
// assign data
return 0;
}

请参阅将数据添加到矢量的链接:http://www.cplusplus.com/reference/vector/vector/vector/

我看到您刚刚开始使用C++。

以下是您自己实现此功能所需的大致概述:

1) 由于您事先知道大小,而且对向量不太熟悉,因此可以考虑使用预先确定大小的数组。(这将作为您的地图)

2) 现在,您有两个字符串要存储,分别对应于一个键和一个值对。

3) 你需要决定什么是关键,取决于哪一个值在配对中是唯一的(想想)

4) 说到实现细节,你根本不会按原样存储密钥(字符串)。你需要对它进行哈希。要对它进行散列,你需要一个哈希函数。看看这里一个常见的函数是使用每个字符的ascii值,乘以以256为基数的位置值(ASCII);'对数组的大素数~~进行模运算。为什么会这样?(请阅读链接!不要盲目追随它,你在学习,而不是黑客:)

5) 现在,散列映射到底是如何工作的?您刚刚散列的这个值返回一个INT,它对应于数组的INDEX,其中存储了相应KEY的value(我们只是散列它以获得INDEX)。

听起来不错吗?

如果你需要帮助,请告诉我!