Как 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
доступ к вашим сохраненным объектам, если вы не используете функции обновления контейнера, после чего он может подключиться к вызову и оперативно настроить хэши.