C++ boost::多索引容器MRU

C++ boost::多索引容器MRU,c++,boost,boost-multi-index,C++,Boost,Boost Multi Index,我有一个用于MRU的bmi多索引容器,定义如下 bmi::multi_index_container<Item, bmi::indexed_by<bmi::sequenced<>, bmi::hashed_unique<bmi::tag<hashed>, KeyExtractor>>> bmi::多索引容器 它实际上是基于体重指数。一旦将项目插入并重新定位到头部,一切正常。当我按键查找并按如下方式检索它时,问题就开始了 item_t

我有一个用于MRU的bmi多索引容器,定义如下

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);
}
项目类型和获取(常量键类型和键)常量
{
自动项=items.template get().find(键);
if(item==items.template get().end())
抛出std::逻辑_错误(“未找到项”);
//将项目重新定位到头部
返回const_cast(*项);
}
因为我是按键查找的,所以我使用散列索引。然后我必须调用
sequenced
上的
relocate
,但是迭代器来自另一个索引,它当然不会工作。当然,迭代
sequenced
并查找相同的项是一种选择,但非常丑陋且效率低下。
还有其他方法吗?

要在不同索引的迭代器之间转换,请使用。

要在不同索引的迭代器之间转换,请使用。

迭代器投影在您的情况下不起作用吗?哇!我不知道。我会查对的away@IgorR. 它像预期的那样工作。谢谢请将您的评论转换为答案迭代器投影在您的案例中不起作用吗?哇!我不知道。我会查对的away@IgorR. 它像预期的那样工作。谢谢请将您的评论转换为答案