-3

我正在尝试使用库函数 make_heap 构建一个最小堆。请指出类比较中的错误。根元素应该是数组中的最小元素,但它不是。

#include<iostream>
#include<map>
#include<algorithm>
using namespace std;
class compare {
        bool operator()(pair<int, int> lhs,pair<int, int> rhs) const 
        {
            return lhs.second < rhs.second;
        }
    };
int main()
{
    int arr[]={9,2,5,7,3,5,7,5,4,5,6,4,5};
    make_heap(arr,arr+13,compare);
    cout<<arr[0];
}
4

2 回答 2

2

尝试

bool cmp(int l, int r) const
    {
        return l< r;
    }

即不在课堂上(如果您希望使其成为静态

然后

make_heap(arr,arr+13,cmp);
于 2013-09-21T17:04:31.450 回答
1

为什么在比较器中使用 a pair

利用 :

class compare {
public: //Make it public 
        bool operator()(const int &lhs, const int& rhs)  const
        {
            return lhs < rhs;
        }

    };

接着

int arr[]={9,2,5,7,3,5,7,5,4,5,6,4,5};
make_heap(arr,arr+13,compare()); //Notice ()
for(auto i:arr)
  cout<<i<<" ";

这里

于 2013-09-21T17:03:31.277 回答