标签: priority-queue

自定义堆中的分段错误

它甚至不执行推送操作。它不调用推送函数,只是构造函数调用和分段错误。为什么会这样?

class Heap {
    vector<int> v;

     void Heapify(int x) {
        int mi = x;
        int l = 2 * x;
        int r = 2 * x + 1;

        if (v[mi] > v[l] && l < v.size()) {
            mi = l;


        }
        if (v[mi] > v[r] && r < v.size()) {
            mi = r;
        }

        if (mi != x) {
            swap(v[mi], v[x]);
            Heapify(mi);
        }
                       }
public:
    Heap() {

        v[0] = -1;
    }
    void push(int x) {

        v.push_back(x);
        int i = v.size()-1; …
Run Code Online (Sandbox Code Playgroud)

c++ heap priority-queue c++11

0
推荐指数
1
解决办法
94
查看次数

std::greater 位于 double 和 class 的 std::pair 上

std::greater当你有课std::pair的时候有用吗int

我正在尝试创建一个成对的优先级队列,按第一个元素排序:

std::priority_queue<std::pair<double, classA>, std::vector<std::pair<double, classA>>, std::greater<std::pair<double, classA>>> priorityQueue
Run Code Online (Sandbox Code Playgroud)

但我收到一条错误消息

与“运算符<”不匹配

它暗示了 的第二个元素std::pair,它是类类型。

应用于std::greater第一个和第二个元素std::pair

c++ std priority-queue min-heap std-pair

0
推荐指数
1
解决办法
2618
查看次数

具有覆盖比较器的优先队列

我在 Java 中使用 PriorityQueue。

我有一个具有这种结构的对象:

public class CostObject {

  String value;
  double cost;

  public CostObject(String val, double cst) {
    value = val;
    cost = cst;
  }
}
Run Code Online (Sandbox Code Playgroud)

优先级是从最便宜到最贵的成本:

PriorityQueue<CostObject> queue = new PriorityQueue<>(1, new Comparator<CostObject> () {

    @Override
    public int compare(CostObject co1, CostObject co2) {
            return (co1.cost > co2.cost) ? 1 : -1;
    }

});
Run Code Online (Sandbox Code Playgroud)

我使用 add 在队列中包含对象。

CostObject co = new CostObject("test", cost);
queue.add(co);
Run Code Online (Sandbox Code Playgroud)

它适用于队列中的每个元素,但我添加的最后一个元素始终位于底部位置。

我究竟做错了什么?

java priority-queue

0
推荐指数
1
解决办法
66
查看次数

为什么 PriorityQueue 的 toString 会乱序返回元素?

我有一个使用 PriorityQueue 的简单代码,我希望整数以降序存储。

PriorityQueue<Integer> jumps = new PriorityQueue<>(20,Collections.reverseOrder());
jumps.add(8);
jumps.add(5);
jumps.add(15);
jumps.add(2);
jumps.add(16);
System.out.println(jumps.toString());
Run Code Online (Sandbox Code Playgroud)

这打印

[16, 15, 8, 2, 5]
Run Code Online (Sandbox Code Playgroud)

虽然我会期待

[16, 15, 8, 5, 2]
Run Code Online (Sandbox Code Playgroud)

我在这里做错了什么?

java priority-queue

0
推荐指数
1
解决办法
50
查看次数

如何获取 C# PriorityQueue 元素的优先级

我正在初始化一个存储 XY 坐标的优先级队列,根据距原点的欧几里得距离确定优先级。我创建了一个自定义Comparer,使其作为最大堆运行:

PriorityQueue<int[], double> maxHeap = new PriorityQueue<int[], double>(Comparer<double>.Create((x, y) => x.CompareTo(y)));

这非常有效,除了有时我希望能够使用Peek(). 我可以获取元素的值,即具有 type 的点int[],但无法获取优先级。我没有看到任何可以让我访问的东西TPriority。以此用例为例,这是堆的常见用法,用于获取集合中的顶部/底部 K 个元素:

for (int i = k; i < points.Length; i++)
{
    double euclidianDistance = EuclidianDistance(points[i]);
    if (euclidianDistance < EuclidianDistance(maxHeap.Peek()))
    {
        maxHeap.Dequeue();
        maxHeap.Enqueue(points[i], euclidianDistance);
    }
}
Run Code Online (Sandbox Code Playgroud)

您将看到我必须再次计算堆顶部元素的欧几里德距离。Visual Studio 向我展示了这一点,尽管我似乎无法访问引用优先级的 double 类型的第二个属性。

在此输入图像描述

c# priority-queue .net-6.0

0
推荐指数
1
解决办法
5105
查看次数

C#优先级队列,泛型类型<T>转换

public class PriorityQueue<T> : IPriorityQueue<T> 
                            where T : IComparable
Run Code Online (Sandbox Code Playgroud)

所以,我已经使用上面的Header创建了一个优先级队列类,我试图将它与另一个类一起使用.

        private static PriorityQueue<Order> PQ;
Run Code Online (Sandbox Code Playgroud)

看起来这应该完全正常,但我收到了这个错误.

namespace.Order不能T在泛型方法中用作类型参数namespace.PriorityQueue<T>.有没有隐式转换从namespace.OrderSystem.IComparable

我无法辨别出这是告诉我要做什么的.这是否意味着我的IComparable实现不足以达到此目的,还是我正在使用某种错误的语法?

c# generics queue priority-queue

-1
推荐指数
1
解决办法
556
查看次数

java.util.PriorityQueue和特定的Comparator中的顺序错误

我对java.util.PriorityQueue和我自己的Comparator的这个小例子感到非常困惑:

在这段代码中,我在队列中得到了错误的顺序。结果是:5,8,7而不是5,7,8 我有什么问题Comparator<Vertex>吗?谢谢您的帮助。

public class Test {

public static void main(String[] args) {
    PriorityQueue<Vertex> priorityQueue = new PriorityQueue<Vertex>(new Comparator() {
        @Override
        public int compare(Object o1, Object o2) {
            Vertex u = (Vertex) o1;
            Vertex v = (Vertex) o2;
            return Integer.compare(new Integer(u.distance), new Integer(v.distance));
        }
    });

    Vertex vertex1 = new Vertex(1);
    Vertex vertex2 = new Vertex(2);
    Vertex vertex3 = new Vertex(3);
    Vertex vertex4 = new Vertex(4);

    vertex1.distance = 8;
    vertex2.distance = 5;
    vertex3.distance = 7;


    priorityQueue.add(vertex1); …
Run Code Online (Sandbox Code Playgroud)

java priority-queue comparator

-1
推荐指数
1
解决办法
749
查看次数

使用更大和向量声明优先级队列

谁能解释一下这个声明的含义:

typedef pair<long long, int> PII;
priority_queue<PII, vector<PII>, greater<PII> > Q;
Run Code Online (Sandbox Code Playgroud)

是否将其视为一对long longint或其他的优先级队列?请有人也解释一下greater<PII>这里是什么?

c++ stl priority-queue

-1
推荐指数
1
解决办法
5852
查看次数

使用优先级队列计算中值

我需要计算中位数.我被告知,最好的方法是在这个特定的应用程序中使用优先级队列.我不知道如何继续.我真的很感激任何帮助.

c++ priority-queue median

-2
推荐指数
1
解决办法
6993
查看次数

将不可比较的对象添加到 PriorityQueue

考虑以下代码:

import java.util.PriorityQueue;

public class Test {

    public static void main(String argv[]) {
        PriorityQueue<A> queue = new PriorityQueue<>();
        System.out.println("Size of queue is " + queue.size()); // prints 0
        try {
            queue.add(new A());
        } catch (ClassCastException ignored) { }
        System.out.println("Size of queue is " + queue.size()); // prints 1
    }

} 
class A { } // non-comparable object
Run Code Online (Sandbox Code Playgroud)

在此代码中,一个明确不可比较的对象被添加到PriorityQueue. 正如PriorityQueue.addJavadoc 所预期的那样,此代码会抛出 a ClassCastException,因为该对象不可比较。

然而,尽管抛出了异常,但队列的大小似乎仍然增加了。

我原本期望两个打印语句都输出 0,但第二个打印语句实际上输出 1,就像一个对象已添加到队列中一样。

这里发生了什么?

java priority-queue

-2
推荐指数
2
解决办法
913
查看次数

Java PriorityQueue.remove() 时间复杂度?O(log N) 还是 O(N)?

PriorityQueue pq = new PriorityQueue<>(); 假设priorityQueue pq 的大小为N,pq.remove() 的时间复杂度是多少?

是 O(log N) 还是 O(N)?

java priority-queue

-2
推荐指数
1
解决办法
369
查看次数

从对的优先级队列中删除特定元素

PriorityQueue<Pair<Integer, Integer>> p = new PriorityQueue<>((a,b)->a.getValue()-b.getValue());
Run Code Online (Sandbox Code Playgroud)

这就是优先级队列的定义方式,其中您可以看到元素是根据键值对中的值而不是键进行排序的。现在我想删除一个特定的元素(不在队列顶部),使用键作为搜索因子。假设队列有元素 ->

p.add(new Pair<>(2,1));
p.add(new Pair<>(3,4));
p.add(new Pair<>(1,5);
Run Code Online (Sandbox Code Playgroud)

我想使用键 (3) 删除元素 (3,4);

删除后的预期输出应该是 -> [[2,1], [1,5]]

java priority-queue

-2
推荐指数
1
解决办法
45
查看次数

使用矢量 C++ 的双打优先队列

我需要使用 STL 向量为优先级队列编写代码

我被分配了使用向量实现优先级队列的任务,之前我使用列表实现了一个队列,这非常简单,因为列表为我提供了我需要的所有功能。除非我遗漏了优先级队列所没有的东西?

cplusplus.com 上对 Priority Queue 的参考说明:在底层容器(向量)上调用 push_back 和对 push_heap 调用一次(我假设是算法),我不确定如何实现 push_heap 和 pop_heap 或者我是否需要根本。

作业特别要求向量

我正在寻找一个很好的实现/解释。

到目前为止,这是 mo 代码:

.cpp

#include"PriorityQueue.h"
#include <algorithm>

PriorityQueue::PriorityQueue(){

}
void PriorityQueue::push(double val){
    s.push_back(val);

}
void PriorityQueue::pop(){


}
double PriorityQueue::front() const{
    return s.front();
}
double PriorityQueue::back() const{
    return s.back();
}
Run Code Online (Sandbox Code Playgroud)

。H

#ifndef PRIORITYQUEUE_H
#define PRIORITYQUEUE_H
#include <vector>
using std::vector;
class PriorityQueue{
public:
    PriorityQueue();
    void push(double val);
    void pop();
    double front() const;
    double back() const;
private:
    vector<double> s;
};
#endif // !PRIORITYQUEUE_H
Run Code Online (Sandbox Code Playgroud)

如果我需要编写代码来跟踪顶部和底部索引,我可能会缺少基本功能,我只是有点卡住了,没有时间浪费尝试不同解决方案的负载。

c++ vector priority-queue

-3
推荐指数
1
解决办法
1981
查看次数

标签 统计

priority-queue ×13

java ×6

c++ ×5

c# ×2

.net-6.0 ×1

c++11 ×1

comparator ×1

generics ×1

heap ×1

median ×1

min-heap ×1

queue ×1

std ×1

std-pair ×1

stl ×1

vector ×1