Нужен ассоциативный массив, к одному элементу которого я мог бы получить доступ двумя разными ключами. Вроде бы мне должен подойти multimap из stl: Но как им правильно пользоваться я так и не врубился. Нашел в интернете какие-то примеры, но ничего общего с тем, что говорится в вышеприведенной цитате я в них не нашел. Можете дать короткий сэмпл, в котором к одному элементу массива обращались бы с помощью разных ключей? Позже в другой книжонке нашел это: Две цитаты из известных книг противоречать друг-другу.
http://www.cplusplus.com/reference/stl/multimap/: чет я не припомню такого контейнера в STL... как вариант использовать std::map с указателями на элементы или с индексами в каком-нить векторе в роли значений... но это канеш некрасиво...
Напрямую на один и тот же элемент несколько ключей ссылаться не могут ни в map, ни в multimap. Могут быть несколько ключей с одинаковыми значениями. Просто непонятно, что конкретно вам нужно. Если действительно нужно одно value для нескольких ключей, то можно вместо value использовать value * (вам придётся самостоятельно следить за удалением самих values), shared_ptr<value> (есть в STL с TR1). Если вам не нужно, чтобы value было одно и тоже, а просто value было одинаковым (например это int), то можно просто использовать map, где просто для разных key есть одинаковые value.
Хмм, я очень не точно выразился в первом посте. Под разными ключами я подразумевал вообще разные типы данных. Погуглил, поспрашивал у людей: говорят в С++ таких плюшек нет. Ну и фиг с ними, раз нет. Обойдусь без них. И вопрос в догонку: есть ли разница что использовать в качестве ключа хэш-таблицы, то есть будет ли таблица, в которой в качестве ключа используется структура(~20 байт), медленней, чем таблицы в который ключ-один DWORD?
map это не хеш таблица (или её вырожденный случай). скорость в основном будет зависеть от функции сравнения (3 параметр шаблона map). некоторые затраты будут на почленное копирование структуры при вставке