DHCP指纹的HashMap实现

时间:2015-04-14 05:17:28

标签: c++ hashmap

我正在用C ++实现Hash Map。我是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个这样的值。 我该如何实现呢?

2 个答案:

答案 0 :(得分:0)

您可以使用std::map来表达此意图。

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

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

string --> vector<int>

然后,在添加到vector之前,您必须首先创建map个整数。如果您没有不断搜索值的应用程序,您甚至可以使用string作为值(但它有自己的缺点,因为存储string是昂贵的比int 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;
}

请参阅此链接以向向量添加数据: http://www.cplusplus.com/reference/vector/vector/vector/

答案 1 :(得分:0)

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

以下是您自己需要实施的内容的广泛概述:

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

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

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

4)来到实现细节,你根本不会按原样存储密钥(字符串)。你需要哈希它。要散列它,您需要一个哈希函数。看看here    一个常见的功能是使用每个字符的ascii值, 乘以它在256(ASCII)中的位置值;'  模数大的素数~~数组的大小。   为什么这样? (阅读链接!不要盲目跟随它,你在学习,而不是黑客攻击:))

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

听起来不错?

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