如何返回boost multi_index迭代器的开始和结束

时间:2012-05-08 09:40:07

标签: c++ linux boost multi-index

我的班级中定义了一个multi_index迭代器。我需要授予用户基于某个索引迭代容器的权限。我只是不知道该怎么做。你可以帮帮我吗?

#include <boost/multi_index_container.hpp>
#include <boost/multi_index/ordered_index.hpp>
#include <boost/multi_index/identity.hpp>
#include <boost/multi_index/member.hpp>

using namespace ::boost;
using namespace ::boost::multi_index;

struct RoadNetwork{
        int n;
        int m;
        RoadNetwork(int q = 0,int p = 0){ n = q; m = p;};
 };

class A
{
public:
    typedef multi_index_container<
    RoadNetwork,
        indexed_by<
            ordered_unique<identity<RoadNetwork> >,
            ordered_non_unique<member<RoadNetwork, int, &RoadNetwork::n> >

        >
    > mindex;
    mindex i;

        const mindex::nth_index<0>::type& iterator_begin() const
        {
            return i.get<0>().begin();
        }

};

int main(void){
    A a;

    return 0;
}

错误是:

~/workspace/multiIndex$ g++ main.cpp   main.cpp: In member function ‘const type& A::iterator_begin() const’: main.cpp:30:34: error: invalid initialization of reference of type ‘const type& {aka const boost::multi_index::detail::ordered_index<boost::multi_index::identity<RoadNetwork>, std::less<RoadNetwork>, boost::multi_index::detail::nth_layer<1, RoadNetwork, boost::multi_index::indexed_by<boost::multi_index::ordered_unique<boost::multi_index::identity<RoadNetwork>
>, 

boost::multi_index::ordered_non_unique<boost::multi_index::member<RoadNetwork, int, &RoadNetwork::n> > >, std::allocator<RoadNetwork> >, boost::mpl::vector0<mpl_::na>, boost::multi_index::detail::ordered_unique_tag>&}’ from expression of type ‘boost::multi_index::detail::ordered_index<boost::multi_index::identity<RoadNetwork>,


std::less<RoadNetwork>, boost::multi_index::detail::nth_layer<1, RoadNetwork, boost::multi_index::indexed_by<boost::multi_index::ordered_unique<boost::multi_index::identity<RoadNetwork>
>, 

boost::multi_index::ordered_non_unique<boost::multi_index::member<RoadNetwork, int, &RoadNetwork::n> > >, std::allocator<RoadNetwork> >, boost::mpl::vector0<mpl_::na>, boost::multi_index::detail::ordered_unique_tag>::const_iterator {aka 

boost::multi_index::detail::bidir_node_iterator<boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::index_node_base<RoadNetwork, std::allocator<RoadNetwork> > > > >}’

我很重视你的帮助。

谢谢你,问候

1 个答案:

答案 0 :(得分:1)

iterator_begin()函数返回类型不正确。正确的声明是:

mindex::nth_index_iterator<0>::type iterator_begin() const;