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