我正在用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个这样的值。 我该如何实现呢?
答案 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)。
听起来不错?
如果您需要帮助,请告诉我们!