![](/img/trans.png)
[英]std::priority_queue with iterators to elements of std::map - invalid heap
[英]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.