【发布时间】:2021-06-16 20:48:03
【问题描述】:
我正在搜索,但没有找到使用自定义比较器创建 priority_queue 的简单方法,但这也需要线性时间来创建 priority_queue 中的元素。
可以使用以下方法在线性时间内创建一个priority_queue:
vector<int> arr = {1,2,3,4};
priority_queue<int> pq(arr.begin(),arr.end());
并且可以使用自定义比较器创建一个priority_queue
auto cmp = [](int p1, int p2){return p1<p2};
priority_queue<int,vector<int>,decltype(cmp)> pq(cmp);
我想知道是否可以这样做:
priority_queue<int,vector<int>,decltype(cmp)> pq(cmp,points.begin(),points.end());
因为如果我使用自定义比较器创建 priority_queue 并使用 push 插入值后,时间复杂度将为 O (nlg (n))
【问题讨论】:
-
我不明白这个问题。您可以在此处查看可用构造函数的列表:en.cppreference.com/w/cpp/container/priority_queue/…,没有一个比线性更糟糕
-
你是什么意思“如果可能的话”?您在尝试时遇到任何问题吗?
-
可以使用自定义比较器创建一个priority_queue,也可以在线性时间内将元素插入到priority_queue中,但是我搜索了很多,我没有找到使用a的方法自定义比较器,并在线性时间内创建优先级队列
-
您发布的使用元素和自定义比较器调用构造函数的代码有什么问题?它不会编译吗?
-
我认为您正在上面的链接中寻找 (13)。您只是将参数按错误的顺序排列。你用的是什么参考?不可能记住所有这些细节,猜测也不行。
标签: c++ constructor find c++17 priority-queue