2015-04-14 3 views
-2

Я реализую Hash-карту на C++. Я новичок в C++. Мне нужно хранить такие значения.Реализация HashMap для отпечатков DHCP

Motorola = 33 03 01 06 15 26 28 51 58 59

Windows Phone = 15 03 01 06 44 47 31 33 121 249 252 43

У меня около 50000 таких значений. Как это реализовать?

+0

Почему вы хотите реализовать свои собственные? Используйте ['std :: unordered_map'] (http://en.cppreference.com/w/cpp/container/unordered_map) – Praetorian

+0

Мне нужно реализовать отпечаток пальца DHCP для каждого устройства. –

+0

ОК, это объясняет. Продолжать. – Praetorian

ответ

0

Вы можете использовать std::map для этого намерения.

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

Здесь, каждый элемент карты состоит из пары string и vector <int>.

string --> vector<int> 

Затем вы должны сначала создать vector целых чисел перед добавлением в map. Если у вас нет приложения постоянного поиска значений, вы можете даже использовать значение string (но у него есть собственные недостатки, так как хранение string s является дорогостоящим, чем int с.).

Тогда это будет выглядеть следующим образом:

std::map<string, string > map_Data; 

И это, конечно, это зависит от вашего приложения и, как вы считывать данные. Вы можете реализовать это как свою собственную хэш-карту, используя массив списков. Но это усложнит ситуацию.

EDIT:

#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/

+0

Что такое вектор ? –

+0

Если вы спрашиваете, что такое 'vector', это контейнер с динамическим размером для разных типов элементов (но по одному типу за раз). Здесь «vector» используется для хранения ваших целых значений. Вы можете использовать массив, но поскольку количество элементов различается для разных имен, это может усложнить ситуацию. –

+0

вектор < int> давая мне ошибки. –

0

Я вижу, вы только начиная с C++.

Вот широкий обзор того, что вам необходимо будет осуществить это самостоятельно:.

1) Так как вы знаете размер заранее, и вы не так хорошо знакомы с векторами, следует использовать массив заданного размера (Это будет вашей картой)

2) Теперь у вас есть 2 строки для хранения, соответствующие паре ключей и значений.

3) Вы должны решить, что это ключ, в зависимости от того, какое значение является уникальным в паре (Think)

4) Далее в детали реализации, вы просто не будет хранить ключ (строки) в качестве это. Вам нужно будет хэшировать его. Чтобы хэш это, вам нужна хэш-функция. Взгляните here Общая функция - использовать значение ascii каждого символа, , умноженное на его значение места в базе 256 (ASCII); ' modulo большое простое число ~~ размер вашего массива. Почему так? (Читайте по ссылке! Не слепо следуйте за ней, вы учитесь, а не взламываете :))

5) Теперь, как работают хеш-карты? Это значение, которое вы только что хэшируете, возвращает INT, что соответствует индексу вашего массива, где хранится VALUE соответствующего KEY (который мы просто HASHED для получения INDEX).

Звучит неплохо?

Сообщите мне, если вам нужна помощь!

Смежные вопросы