有没有人知道boost :: multi_index库中迭代器投影的复杂性?文档可以在boost::multi_index projection of iterators找到,但它没有说明操作的复杂性。
基本思想是,您可以检索索引中对象的迭代器,然后将其投影到第二个索引中,并在第二个索引中获取同一对象的迭代器。如果这是一个O(1)操作,那么你可以有效地维护两个索引,一个可以在快速时间内搜索,另一个可以在较慢的时间内搜索。据我所知,迭代器的投影允许我在索引中找到一个更快速搜索的对象,然后将其投影到速度较慢的可搜索索引中。
我很想知道它是否是迭代器投影的简单O(1)查找,或者它是否有效地在第二个索引中启动了一个find操作,因此依赖于你投射到的特定索引并且比O(1)慢。
非常感谢您的帮助!
答案 0 :(得分:2)
这是documentation中指定的常数时间,实际上,它的速度最快:
template<int N,typename IteratorType>
typename nth_index_iterator<N>::type project(IteratorType it)
{
typedef typename nth_index<N>::type index_type;
...
return index_type::make_iterator(static_cast<node_type*>(it.get_node()));
}
这只是对任何索引迭代器持有的内部节点指针的重写。