【问题标题】:HashMap implementation for DHCP fingerprintsDHCP指纹的HashMap实现
【发布时间】:2015-04-14 05:17:28
【问题描述】:

我正在用 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::unordered_map
  • 我必须为每个设备实现 DHCP 指纹
  • 好的,这就解释了。继续。
  • 我还是不明白为什么无序地图不适合你。

标签: c++ hashmap


【解决方案1】:

您可以为此意图使用std::map

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

在这里,每个地图元素由一对string和一个vector &lt;int&gt;组成。

string --> vector<int>

那么你必须先创建一个整数的vector,然后再添加到map。如果您没有不断搜索值的应用程序,您甚至可以使用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/

【讨论】:

  • 什么是向量
  • 如果你问什么是vector,它是一个动态大小的容器,用于不同类型的元素(但一次只有一种类型)。在这里,vector 用于存储您的整数值。您可以使用数组,但由于不同名称的元素数量不同,这可能会使事情变得复杂。
  • 添加#include &lt;map&gt;#include &lt;vector&gt;#include &lt;string&gt;using namespace std;
  • #include #include#include int main() { std :: map>std:: string, vector> data;data[motorola] = { 10,20,22.43}; return 0;} 它是我的代码,它给我的向量未定义为错误
  • 我想你现在应该明白了。如果没有,我假设你对 C++ 毫无概念。
【解决方案2】:

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

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

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

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

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

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

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

听起来不错?

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2010-12-19
    • 2019-01-31
    • 2012-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多