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>
然后,在添加到map
之前,必须首先创建一个整数的vector
。如果你没有不断搜索值的应用程序,你甚至可以使用string
作为值(但它也有自己的缺点,因为存储string
s比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/
我看到您刚刚开始使用C++。
以下是您自己实现此功能所需的大致概述:
1) 由于您事先知道大小,而且对向量不太熟悉,因此可以考虑使用预先确定大小的数组。(这将作为您的地图)
2) 现在,您有两个字符串要存储,分别对应于一个键和一个值对。
3) 你需要决定什么是关键,取决于哪一个值在配对中是唯一的(想想)
4) 说到实现细节,你根本不会按原样存储密钥(字符串)。你需要对它进行哈希。要对它进行散列,你需要一个哈希函数。看看这里一个常见的函数是使用每个字符的ascii值,乘以以256为基数的位置值(ASCII);'对数组的大素数~~进行模运算。为什么会这样?(请阅读链接!不要盲目追随它,你在学习,而不是黑客:)
5) 现在,散列映射到底是如何工作的?您刚刚散列的这个值返回一个INT,它对应于数组的INDEX,其中存储了相应KEY的value(我们只是散列它以获得INDEX)。
听起来不错吗?
如果你需要帮助,请告诉我!
- 如果没有malloc,链表实现将失败
- 如何在c++中实现处理器调度模拟器
- 如何在c++中使用引用实现类似python的行为
- 实现无开销push_back的最佳方法是什么
- 使用简单类型列表实现的指数编译时间.为什么
- 如何在BST的这个简单递归实现中消除警告
- 正在寻找C++不可变的hashset/hashmap
- 实现一个在集合上迭代的模板函数
- 我应该实现右值推送功能吗?我应该使用std::move吗
- 如何正确实现和访问运算符的各种自定义枚举器
- C++Union/Struct位域的实现和可移植性
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 在c++中实现LinkedList时,应出现未处理的错误
- 为左值和右值的包装器实现C++范围
- DHCP指纹的HashMap实现
- tbb并发hashmap实现字典ADT
- 如何在C++中实现 HashMap 时使用 std::function
- 使用HashTable实现HashMap
- 用hashmap代替邻接矩阵实现maxflow算法
- C++中简单的hashmap实现