Хэш-таблица с несколькими ключами (unordered_map) - PullRequest
3 голосов
/ 25 сентября 2010

Мне нужно использовать несколько ключей (тип int) для хранения и извлечения одного значения из хеш-таблицы.Я бы использовал несколько ключей для индексации одного элемента.Мне нужна быстрая вставка и поиск хеш-таблицы.Кстати, мне не разрешено использовать библиотеку Boost в реализации.

Как я могу это сделать?

Спасибо.

Ответы [ 4 ]

3 голосов
/ 25 сентября 2010

Если вы имеете в виду, что два целых числа образуют один ключ, то unordered_map<std::pair<int,int>, value_type>. Если вы хотите проиндексировать один и тот же набор данных несколькими ключами, посмотрите на Boost.MultiIndex .

2 голосов
/ 25 сентября 2010

Если ключ к вашему контейнеру состоит из комбинации int s, вы можете использовать boost :: tuple в качестве ключа, чтобы инкапсулировать int s без дополнительной работы с вашимчасть.Это верно, если ваш счетчик ключевых int подкомпонентов фиксирован.

1 голос
/ 25 сентября 2010

Самый простой способ - это, вероятно, сохранить карту указателей / индексов для элементов в списке.

Здесь требуется еще несколько деталей, нужно ли вам поддерживать удаление? как настроены элементы? Можете ли вы использовать boost :: shared указатели? (довольно полезно, если вам нужно поддержать удаление)

Я предполагаю, что значение объекта в этом случае велико, или есть какая-то другая причина, по которой вы не можете просто дублировать значения в обычной карте.

0 голосов
/ 25 сентября 2010

Если это всегда будет комбинация для поиска.

Тогда лучше сформировать один составной ключ, используя несколько ключей.

Вы можете сделать это либо

  1. Хранение ключа в виде объединенной строки целых чисел типа

     (int1,int2,int3) => data
    
  2. Использование более высокого типа данных, например, uint64_t, в котором вы можете добавить отдельные значения для формирования ключа

    // Refer comment below for the approach
    
...