Каков наилучший способ (на C++) создать контейнер для двукратного индексирования? В частности, у меня есть список объектов, каждый из которых индексируется ключом (возможно, несколькими ключами). Это подразумевает мультимап. Проблема с этим, однако, заключается в том, что это означает, что, возможно, хуже, чем линейный поиск, чтобы найти местоположение объекта. Я бы предпочел избежать дублирования данных, поэтому, чтобы каждый объект поддерживал свою собственную координату и должен был перемещаться по карте, было бы плохо (не говоря уже о том, что перемещение вашего собственного объекта может косвенно вызвать вашего деструктора в то время как в функции-члене!). Я предпочел бы некоторый контейнер, который поддерживает индекс как указателем на объект, так и координатой, и что сами объекты гарантируют стабильные ссылки/указатели. Затем каждый объект может хранить итератор в индексе (включая координату), достаточно абстрагироваться и знать, где он находится. Boost.MultiIndex кажется лучшей идеей, но это очень страшно, и я не хочу, чтобы мои фактические объекты нуждались в const.Лучший контейнер для двойной индексации
Что вы посоветуете?
EDIT: Boost Bimap кажется приятным, но обеспечивает ли он стабильное индексирование? То есть, если я изменяю координату, ссылки на другие элементы должны оставаться действительными. Причина, по которой я хочу использовать указатели для индексирования, состоит в том, что объекты в противном случае не имеют внутреннего порядка, и указатель может оставаться постоянным, пока объект изменяется (что позволяет использовать его в Boost MultiIndex, который, IIRC, обеспечивает стабильную индексацию).
Ваша запись, по-видимому, использует «ключ» и «координировать» взаимозаменяемые; вы можете уточнить? Поддерживает ли ваше приложение отношение «многие ко многим» между ключами и объектами или может ли один ключ ссылаться на многие объекты, но только на один ключ на объект? –