Как boost::multi_index работает с функциями-членами?

Если у меня есть повышение::multi_index следующим образом,

typedef multi_index_container<
    employee,
    indexed_by<    
        hashed_unique<mem_fun<employee, std::string, &employee::getname> >,
        hashed_unique<mem_fun<employee, int, &employee::getage> >
    > 
> employee_set;

Я понимаю, что объекты класса "сотрудники", которые вставляются в этот контейнер, хранятся таким образом, что его можно получить за O(1) раз (как хэш-карту).

Как он будет храниться, когда переменные-члены (имя, возраст) обновляются в течение программы (например, с помощью setname или setage) и все еще хешируются с использованием этих значений? Я что-то не так понимаю?

ТИА

1 ответ

Из документации:

Итераторы, предоставляемые каждым индексом, являются постоянными, то есть элементы, на которые они указывают, не могут быть изменены напрямую. Это следует за интерфейсом std::set для упорядоченных индексов, но может стать неожиданностью для других типов, таких как упорядоченные индексы, которые моделируются после std::listгде этого ограничения не бывает. Это, казалось бы, странное поведение навязывается multi_index_containerс работой; если бы элементы могли быть изменены без разбора, мы могли бы внести несоответствия в упорядоченные индексы multi_index_container без уведомления контейнера об этом. Модификация элемента выполняется правильно с помощью операций обновления любого индекса.

Другими словами, у вас есть только const доступ к вашим сохраненным объектам, если вы не используете функции обновления контейнера, после чего он может подключиться к вызову и оперативно настроить хэши.

Другие вопросы по тегам