LINUX.ORG.RU

[C++] 2x-мерная hash_map таблица

 


0

0

Значица обычный hash_map из C++ std ext дает нам возможность сделать нечто, к чему потом можно получать доступ как-то так
int ves = kolbasa["ves"]

А мне нужен 2х-мерный хэш-массив, в котором один ключ это int а другой char (ну по идее можно и int) и хранящееся значение тоже int

То бишь в итоге чтобы получалось
int n = hash[15]["f"];

Какие у кого идеи?
Может можно сделать и не через hash_map...
Но для меня очень критична скорость. В этом массиве будет... э... ну очень много данных :)


забываем про нестандартный hash_map, в C++ 2009 будет unordered_map (на самом деле он уже есть в gcc 4.x и msvs 2008 sp1).

unordered_map < int, unordered_map < string, int > >

Reset ★★★★★
()

struct MyKey { int myint, char mychar; };

size_t std::hash<MyKey>(MyKey key)
{
  return std::hash(myint) + std::hash(mychar);
}

bool std::equal_to<MyKey>(MyKey key1, MyKey key2)
{
  return key1.myint == key2.myint && key1.muchar == key2.mychar;
}

...

std::hash_map<MyKey,MyData> my_hash_map;
Data data = my_hash_map[MyKey(123,'a')];

Dendy ★★★★★
()
Ответ на: комментарий от Dendy

1. Много букв по сравнению с моим вариантом

2. Скорость ниже из-за кривого хеша

3. В std нельзя ничего определать - плохой стиль. Чтобы сделать то что ты сделал надо использовать третий параметр у контейнеров, который и определяет хеш функцию.

Reset ★★★★★
()

Используй либо хэш хэшей, либо хэш с std::pair<int, char> в качестве ключа. Второе лучше имхо.

anonymous
()

> А мне нужен 2х-мерный хэш-массив, в котором один ключ это int а другой char

если char - никто не мешает завести массив hash_map из 256-ти элементов и не е%%%ть себе мозги

lester ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.