Хэш-массивы с С++

Тема в разделе "LANGS.C", создана пользователем Sholar, 27 дек 2011.

  1. Sholar

    Sholar New Member

    Публикаций:
    0
    Регистрация:
    16 окт 2011
    Сообщения:
    189
    Нужен ассоциативный массив, к одному элементу которого я мог бы получить доступ двумя разными ключами. Вроде бы мне должен подойти multimap из stl:
    Но как им правильно пользоваться я так и не врубился. Нашел в интернете какие-то примеры, но ничего общего с тем, что говорится в вышеприведенной цитате я в них не нашел. Можете дать короткий сэмпл, в котором к одному элементу массива обращались бы с помощью разных ключей?

    Позже в другой книжонке нашел это:
    Две цитаты из известных книг противоречать друг-другу.
     
  2. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    http://www.cplusplus.com/reference/stl/multimap/:
    чет я не припомню такого контейнера в STL... как вариант использовать std::map с указателями на элементы или с индексами в каком-нить векторе в роли значений... но это канеш некрасиво...
     
  3. Ursus

    Ursus Member

    Публикаций:
    0
    Регистрация:
    15 мар 2006
    Сообщения:
    238
    Адрес:
    Russia
    Корявости перевода. Штобы етого избежать, читаем msdn
     
  4. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    std::map на shared_ptr
     
  5. Sholar

    Sholar New Member

    Публикаций:
    0
    Регистрация:
    16 окт 2011
    Сообщения:
    189
    Это же Boost, не?
     
  6. sergegers

    sergegers New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2008
    Сообщения:
    172
    Напрямую на один и тот же элемент несколько ключей ссылаться не могут ни в map, ни в multimap. Могут быть несколько ключей с одинаковыми значениями. Просто непонятно, что конкретно вам нужно. Если действительно нужно одно value для нескольких ключей, то можно вместо value использовать value * (вам придётся самостоятельно следить за удалением самих values), shared_ptr<value> (есть в STL с TR1). Если вам не нужно, чтобы value было одно и тоже, а просто value было одинаковым (например это int), то можно просто использовать map, где просто для разных key есть одинаковые value.
     
  7. Sholar

    Sholar New Member

    Публикаций:
    0
    Регистрация:
    16 окт 2011
    Сообщения:
    189
    Хмм, я очень не точно выразился в первом посте. Под разными ключами я подразумевал вообще разные типы данных. Погуглил, поспрашивал у людей: говорят в С++ таких плюшек нет. Ну и фиг с ними, раз нет. Обойдусь без них.
    И вопрос в догонку: есть ли разница что использовать в качестве ключа хэш-таблицы, то есть будет ли таблица, в которой в качестве ключа используется структура(~20 байт), медленней, чем таблицы в который ключ-один DWORD?
     
  8. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Sholar
    Начиная с 2009-го стандарта это STL.
     
  9. sergegers

    sergegers New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2008
    Сообщения:
    172
    map это не хеш таблица (или её вырожденный случай). скорость в основном будет зависеть от функции сравнения (3 параметр шаблона map). некоторые затраты будут на почленное копирование структуры при вставке
     
  10. Sholar

    Sholar New Member

    Публикаций:
    0
    Регистрация:
    16 окт 2011
    Сообщения:
    189
    sergegers, спасибо.