Является ли использование карты, в которой значение std :: shared_ptr, хорошим выбором для создания многоиндексированных списков классов?

проблема проста:
У нас есть класс, в котором есть члены a, b, c, d …
Мы хотим иметь возможность быстро искать (ключом является значение одного члена) и обновлять список классов новым значением, предоставляя текущее значение для a или b или c …
Я думал о том, чтобы иметь кучу
std::map<decltype(MyClass.a/*b,c,d*/),shared_ptr<MyClass>>,

1) Это хорошая идея?

2) Превосходство мульти индекса индекса лучше, чем это решение ручной работы во всех отношениях?

PS SQL исключен из соображений простоты / совершенства.

6

Решение

  1. Повышение MultiIndex может иметь явный недостаток, который он пытается сохранить все показатели в актуальном состоянии после каждой мутации коллекции.
    Это может привести к значительному снижению производительности, если у вас есть фаза загрузки данных с множеством отдельных записей.

  2. Шаблоны использования Boost Multi Index могут не соответствовать стилю кодирования (и вкусу …) проекта (участников). Это должно быть небольшим недостатком, но я думал, что упомяну это

  3. Как ildjarn Как уже упоминалось, Boost MI пока не поддерживает семантику перемещения

В противном случае я бы посчитал Boost MultiIndex превосходным в большинстве случаев, так как вряд ли вы достигнете объема полученного тестирования.

7

Другие решения

Вы хотите рассмотреть возможность размещения всех ваших карт в одном классе, произвольно выбрать один из контейнеров как тот, в котором хранятся «реальные» объекты, а затем просто использовать std::map с отображенным типом необработанных указателей на элементы первого std::map,

Однако это будет немного сложнее, если вам когда-нибудь понадобится сделать копии этих карт.

1