我有一个 boost multi_index_container,存储了一堆具有以下索引的位置
boost::multi_index::indexed_by<
boost::multi_index::ordered_unique<
boost::multi_index::tag<Slot>,
boost::multi_index::identity<SlotData>
>, //ordered_unique
boost::multi_index::ordered_non_unique<
boost::multi_index::tag<Level>,
SlotData::ExtractZ
>, // ordered_non_unique
...//index by
.//typedef as SlotLocations
在这个定义中,我相信默认索引将是基于Slot
的ordered_unique
。后来我有一个迭代器 SlotLocations::iterator
,我想用它来存储基于 Level
的搜索结果,即 ordered_non_unique
:
typedef SlotLocations::index<Level>::iterator MIterator;
std::pair<MIterator, MIterator> range = map.get<Level>().range(..some conds..);
SlotLocations::iterator itr = range.first; //error
范围搜索可以工作并返回存储在范围
中的所需结果,但是此代码将无法使用行标记进行编译,并出现以下错误:
error: no match for 'operator='
为什么我不能像这样分配/存储迭代器?存储搜索结果迭代器的可能方法是什么?
最佳答案
您必须跨索引投影迭代器
应该是这样的
SlotLocations::iterator itr = project<Slot>(map, range.first);
关于c++ - Boost 多索引有序迭代器分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20982739/