繁体   English   中英

提升priority_queue迭代器

[英]Boost priority_queue iterators

我正在学习Boost。 我想看看heap :: priority_queue。

我试图迭代优先级队列,但是我遇到了用户定义类型的困难。 我注意到

    boost::heap::priority_queue<int>::iterator it1; //works fine
    boost::heap::priority_queue<myClass*>::iterator it2; //compiler error

第二个声明导致编译器错误

    error: no matching function call for call to boost::iterator_adapter...

这背后的原因是什么?

编辑1:对不起,我打算放下myClass *而不是相反,这已得到修复。 滑倒我的角色。 完整的错误消息是:

/usr/include/boost/heap/detail/stable_heap.hpp|534|error:
  no matching function for call to
   ‘boost::iterator_adaptor<boost::heap::detail::stable_heap_iterator<
        myClass*, __gnu_cxx::__normal_iterator<myClass* const*, 
          std::vector<myClass*, std::allocator<myClass*> > >, 
      boost::heap::detail::heap_base<myClass*, std::less<myClass*>, false, long unsigned int, false> >,
    __gnu_cxx::__normal_iterator<myClass* const*, std::vector<myClass*, std::allocator<myClass*> > >,
    myClass* const,
    boost::random_access_traversal_tag, 
    boost::use_default,
    boost::use_default>
      ::iterator_adaptor(int)’

编辑2:想象一下myClass的定义如下:

    class myClass
    {
         private:
              int value;
         public:
              inline int getValue() { return this->value; }
              inline void setValue(int v) { this->value = v; }
    }

很简单。

似乎boost::heap::priority_queue中的iterator类型不是默认可构造的。 但是,您可以这样做:

typedef boost::heap::priority_queue<myClass*> queue_t;
queue_t queue;
queue_t::iterator it2 = queue.begin();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM