Карта хеширования с двумя ключами - поиск всех элементов, связанных с одним ключом.C ++ - PullRequest
0 голосов
/ 29 июля 2010

У меня есть объект Line, который содержит 2 объекта типа Point с именами Point1 и Point2. Я хочу создать HashMap, содержащий строки и ключи которых std::pair<Point1, Point2>.

Что я хотел бы сделать, так это найти все строки, на которые ссылаются (например) Point1, т.е. с ключом std::pair<Point1, Anything>. Меня не волнует std::pair<Anything, Point1>.

Я не знаю, возможно ли это или нет, я надеюсь, что это так.

Спасибо

Ответы [ 2 ]

1 голос
/ 29 июля 2010

Похоже, что вы действительно хотите, это std::multimap (или std::unordered_multimap), с отдельными точками в качестве ключей и линиями (pair<point, point>) в качестве связанных значений. В качестве альтернативы, поскольку ключ содержит первую точку, это можно сделать как std::multimap<point, point>, чтобы избежать сохранения Point1 дважды, один раз как ключ и снова как часть связанного значения. В любом случае легко найти все линии, которые используют конкретную точку.

Другая возможность (если набор линий достаточно статичен) состоял бы в том, чтобы поместить ваши линейные объекты в вектор, отсортированный по Point1. Это (опять же) позволяет быстро искать все линии, которые включают определенную точку. Преимущество состоит в том, что это уменьшает объем данных, которые необходимо хранить (устраняет указатели между узлами), и в целом повышает скорость поиска. Недостатком является то, что вставка или удаление элементов происходит относительно медленно.

0 голосов
/ 29 июля 2010

Конечно, ключ - это не пара, а точка - Pont1, если быть точным.Пара - это данные, а не ключ.

...