У меня есть bmi multi_index_container для MRU, определенный следующим образом
bmi::multi_index_container<Item, bmi::indexed_by<bmi::sequenced<>, bmi::hashed_unique<bmi::tag<hashed>, KeyExtractor>>>
На самом деле он основан на примере bmi . После вставки и перемещения элемента в голову все в порядке. Проблема начинается, когда я ищу ключ и извлекаю его следующим образом.
item_type & get(const key_type & key) const
{
auto item = items.template get<hashed>().find(key);
if (item == items.template get<hashed>().end())
throw std::logic_error("Item not found");
//relocate the item to the head
return const_cast<item_type &>(*item);
}
Так как я ищу по ключу, я использую хешированный индекс. Тогда я должен вызвать relocate
на sequenced
но итератор из другого индекса и он конечно не будет работать. Конечно, перебирать sequenced
и находить один и тот же элемент — вариант, но довольно уродливый и неэффективный. Есть ли другой способ сделать это?