DHCP 指纹的 HashMap 实现

HashMap implementation for DHCP fingerprints

我正在用 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>

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

然后它看起来像:

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;
}

参考此 link 向矢量添加数据: http://www.cplusplus.com/reference/vector/vector/vector/

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

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

1) 由于您事先知道大小,并且您对矢量不太熟悉,请考虑使用预定大小的数组。(这将用作您的地图)

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

3) 你需要决定什么是键,这取决于对中哪个值是唯一的(思考)

4) 关于实现细节,您根本不会按原样存储密钥(字符串)。你需要散列它。要对其进行哈希处理,您需要一个哈希函数。看看here 一个常用的函数是使用每个字符的ascii值, 乘以它在基数 256 (ASCII) 中的位值;' 模一个大素数 ~~ 数组的大小。 为什么这样? (阅读link!不要盲目跟风,你是在学习,而不是黑客:))

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

听起来不错?

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