首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Boost priority_queue迭代器

Boost priority_queue迭代器
EN

Stack Overflow用户
提问于 2015-12-16 00:16:00
回答 1查看 82关注 0票数 1

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

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

代码语言:javascript
复制
    boost::heap::priority_queue<int>::iterator it1; //works fine
    boost::heap::priority_queue<myClass*>::iterator it2; //compiler error

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

代码语言:javascript
复制
    error: no matching function call for call to boost::iterator_adapter...

这背后的原因是什么?

编辑1:对不起,我的意思是把myClass*放下来,而不是反过来,这个问题已经修复了。这是我的错。完整的错误消息是:

代码语言:javascript
复制
/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是这样定义的:

代码语言:javascript
复制
    class myClass
    {
         private:
              int value;
         public:
              inline int getValue() { return this->value; }
              inline void setValue(int v) { this->value = v; }
    }

非常简单。

EN

回答 1

Stack Overflow用户

发布于 2015-12-16 00:55:43

boost::heap::priority_queue中的iterator类型似乎不是默认的可构造类型。但是,您可以执行以下操作:

代码语言:javascript
复制
typedef boost::heap::priority_queue<myClass*> queue_t;
queue_t queue;
queue_t::iterator it2 = queue.begin();
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34294140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档