如何使用初始数据和自定义比较器声明 stl::priority_queue?

How to declare an stl::priority_queue with initial data and custom comparator?

我的结构需要 priority_queue。我想使用数组中的初始数据和自定义比较器构建一个:

class mycomparison
{
public:
    mycomparison(const bool& maxOnTop=false, const int& compField = 0);
    ...
};

mergeRecord initialRecords[N]; // my array
mycomparison(false, field); // my custom comparator

std::priority_queue<mergeRecord, std::vector<mergeRecord>, mycomparison>
    recsHeap(???);

在 cplusplus 参考资料中,有一个示例说明如何使用比较器 具有初始值的数组来初始化 priority_queue 对象。我该怎么做呢?我知道我可以一个一个地插入它们,但这会花费 O(nlogn) 而一次传递它们是 O(n)。

std::priority_queue 的范围构造函数允许您将比较函数作为可选参数传入:

template <class InputIterator>
priority_queue (InputIterator first, InputIterator last,
                const Compare& comp = Compare(),
                const Container& ctnr = Container());

所以就这样称呼它:

std::priority_queue<mergeRecord,std::vector<mergeRecord>,mycomparison>
    recsHeap(std::begin(initialRecords), std::end(initialRecords), mycomparison(false,field));

在下面的示例中,std::greater<int> 是比较函数,myints 是一个整数数组。我们可以创建一个 priority_queue my_priority_queue 如下:

int myints[]= {10,60,50,20};
std::priority_queue<int, std::vector<int>, std::greater<int> >
                            my_priority_queue(myints,myints+4);

在你的例子中:

priority_queue<mergeRecord,std::vector<mergeRecord>,mycomparison>
 recsHeap (mergeRecord, mergeRecord+ kWayMerge,mycomparison(false,field));