Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 提升优先级队列迭代器_C++_Boost - Fatal编程技术网

C++ 提升优先级队列迭代器

C++ 提升优先级队列迭代器,c++,boost,C++,Boost,我正在努力学习。我想看看heap::priority\u队列 我试图迭代优先级队列,但是在使用用户定义的类型时遇到了困难。 我注意到了 boost::heap::priority_queue<int>::iterator it1; //works fine boost::heap::priority_queue<myClass*>::iterator it2; //compiler error 这背后的原因是什么 编辑1:对不起,我本想放下我的类*而不是

我正在努力学习。我想看看heap::priority\u队列

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

    boost::heap::priority_queue<int>::iterator it1; //works fine
    boost::heap::priority_queue<myClass*>::iterator it2; //compiler error
这背后的原因是什么

编辑1:对不起,我本想放下我的类*而不是相反的方式,这个问题已经解决了。在我这方面失言。完整的错误消息是:

/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)’

非常简单。

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

typedef boost::heap::priority_queue<myClass*> queue_t;
queue_t queue;
queue_t::iterator it2 = queue.begin();
typedef boost::heap::priority\u queue\t;
排队;
queue_t::迭代器it2=queue.begin();

*myClass
毫无意义。你能澄清一下吗?并发布完整的错误消息。您是通过创建
it2
还是通过使用它获得错误?您能否显示一个产生错误的完整、最小的示例?声明时会出现错误消息,如上所示。New edit显示myClass的最简单示例。这会产生相同的错误。这本质上不就是做上面同样事情的更冗长的方式吗?你说“不可默认构造”是什么意思?我的意思是(至少在我的系统上!)不初始化迭代器就不能创建迭代器。您使用的是什么Boost版本、操作系统和编译器?
    class myClass
    {
         private:
              int value;
         public:
              inline int getValue() { return this->value; }
              inline void setValue(int v) { this->value = v; }
    }
typedef boost::heap::priority_queue<myClass*> queue_t;
queue_t queue;
queue_t::iterator it2 = queue.begin();