How to iterate over a bunch of fibonacci (boost) that contains a deque <MyData> element
I use a bunch of Fibonacci (boost) to order an array of elements, but I can't iterate over a bunch. The code looks like this:
#include <deque>
#include <boost/heap/fibonacci_heap.hpp>
#include <iostream>
struct MyData {
...
long int id;
...
};
struct MyCompare{
bool operator()(const deque<MyData> &a, const deque<MyData> &b) const
{
return a[a.size()-1].id > b[b.size()-1].id;
}
};
int main()
{ deque<MyData> array1;
deque<MyData> array2;
MyData app;
app.id=15;
array1.push_front(app);
app.id=10;
array1.push_front(app);
app.id=5;
array2.push_front(app);
app.id=2;
array2.push_front(app);
boost::heap::fibonacci_heap<deque<MyData>, boost::heap::compare<MyCompare> > fib_heap;
fib_heap.push(array1);
fib_heap.push(array2);
boost::heap::fibonacci_heap<deque<MyData>, boost::heap::compare<MyCompare> >::iterator it;
boost::heap::fibonacci_heap<deque<MyData>, boost::heap::compare<MyCompare> >::iterator beg =fib_heap.begin();
boost::heap::fibonacci_heap<deque<MyData>, boost::heap::compare<MyCompare> >::iterator end =fib_heap.end();
for (it=beg;it!=end; ++it) {
deque<MyData> elem;
elem =*it;
for (int k=0;k < elem.size();k++)
cout<<" "<<elem[k].id;
cout<<"\n";
}
}
This gives me this error in the line "elem = * it": Error while creating recursive_tree_iterator: recursive_tree_iterator (invalid): adaptor_type (0) {}
Is there any way to do this? Or using another ordered heap instead of Fibonacci? Thank you very much.
+3
1 answer
I think the error is that you cannot build an iterator by default. Try to exclude the creation of the variable itand move it inside the for loop:
boost::heap::fibonacci_heap<deque<MyData>, boost::heap::compare<MyCompare> >::iterator beg =fib_heap.begin();
boost::heap::fibonacci_heap<deque<MyData>, boost::heap::compare<MyCompare> >::iterator end =fib_heap.end();
for (boost::heap::fibonacci_heap<deque<MyData>, boost::heap::compare<MyCompare> >::iterator it=beg;it!=end; ++it) {
deque<MyData> elem;
elem =*it;
for (size_t k=0;k < elem.size();k++)
cout<<" "<<elem[k].id;
cout<<"\n";
}
, :
ordered_iterator ordered_begin(void) const;
ordered_iterator ordered_end(void) const;
, , auto:
for (auto it=fib_heap.begin(), end=fib_heap.end();it!=end; ++it) {
deque<MyData> elem;
elem =*it;
for (size_t k=0;k < elem.size();k++)
cout<<" "<<elem[k].id;
cout<<"\n";
}
0