我有一张这样定义的地图
std::map<int,int> myMap;
处理完这张地图后,我想把它当作一个堆(基于第二个值)。我决定使用 std::make_heap 函数......它的定义是这样的......
template< class RandomIt, class Compare > void make_heap( RandomIt first, RandomIt last, Compare comp );
因为这个函数需要定义一个比较函数......我这样做了
bool compare(const std::pair<int,int> &frst, const std::pair<int,int> &scnd)
现在有了这个设置,我像这样调用 make_heap
std::make_heap(myMap.begin(), myMap.end(),compare);
但这给了我编译错误......
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_heap.h: In function ‘void std::make_heap(_RandomAccessIterator, _RandomAccessIterator) [with _RandomAccessIterator = std::_Rb_tree_iterator<std::pair<const int, int> >]’:
maxRepeatingNumber.cc:48: instantiated from here /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_heap.h:357: error: no match for ‘operator-’ in ‘__last - __first’
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include e/c++/4.1.2/bits/stl_bvector.h:182: note: candidates are: ptrdiff_t std::operator-(const std::_Bit_iterator_base&, const std::_Bit_iterator_base&)
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/ c++/4.1.2/bits/stl_heap.h:360: error: no match for ‘operator-’ in ‘__last - __first’
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_bvector.h:182: note: candidates are: ptrdiff_t std::operator-(const std::_Bit_iterator_base&, const std::_Bit_iterator_base&)
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_heap.h:364: error: no match for ‘operator+’ in ‘__first + __parent’
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_bvector.h:267: note: candidates are: std::_Bit_iterator std::operator+(ptrdiff_t, const std::_Bit_iterator&)
编译错误给了我一个提示,他们可能是因为 make_heap 需要 random_access_iterator ......但我不确定。
我应该转到函数对象(从普通函数指针)吗?
有什么帮助吗?