标签: priority-queue

更新CoreFoundation PriorityQueue实现以利用ARC for iOS

我发现了一个主要用于CFBinaryHeap工作的优先级队列的实现.

我目前正在使用-fno-objc-arc编译器标志在编译这些文件时跳过ARC的使用.我尝试更新此代码以利用ARC,尽管我遇到了一些理解障碍.

这里有没有人更新类似于此的代码用于ARC?

你如何处理之类的东西free(),和CFRelease()?我们可以摆脱它们吗?

你有什么用做retainrelease你创建的方法CFBinaryHeapCallBacks

您是否使用__bride__bridge_transfer引用const void *Objective-C对象?同样,你应该使用(__bridge_retained void *)obj_unretainedPointer()反过来吗?

objective-c priority-queue core-foundation ios automatic-ref-counting

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

struct list push_back的C++问题

我有两个结构(部分任务).一个列表 - 活动,包含在另一个 - 流程中.然后,几个父Process结构包含在优先级队列中.

struct Activity {
public:
    int time;
    string type;
    Activity(int newTime, string newType):
    time(newTime),type(newType){}
};

struct Process {
public:
    string PID;
    int arrivalTime;
    int priority;
    list<Activity> activityQueue;
    Process( string newPID, int newTime, int newPriority, list<Activity>
         newActivityQueue):
    PID(newPID),arrivalTime(newTime), priority(newPriority), 
         activityQueue(newActivityQueue){}
Run Code Online (Sandbox Code Playgroud)

};

我收到以下错误...

main.cpp:206:61: error: passing ‘const std::list<Activity>’ as ‘this’ argument of
‘void std::list<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = Activity,
_Alloc = std::allocator<Activity>, std::list<_Tp, _Alloc>::value_type = 
Activity]’ discards qualifiers [-fpermissive]
Run Code Online (Sandbox Code Playgroud)

...当我尝试将一个Activity推送回Process的activityQueue时.

Activity currentActivity = cpuQueue.top().activityQueue.back();
currentActivity.time--
cpuQueue.top().activityQueue.push_back(currentActivity);
Run Code Online (Sandbox Code Playgroud)

c++ compiler-errors list priority-queue

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

如何使用固定数量的线程使用未绑定的可排序队列?

请假设以下内容:

public static void main(String[] args) {
    ThreadPoolExecutor pool = new ThreadPoolExecutor(0, 5, 1L, TimeUnit.SECONDS, new PriorityBlockingQueue<Runnable>());
    DashboardHtmlExport d = new DashboardHtmlExport();
    for (int i = 0; i < 40; i++) {
        System.out.println("Submitting: " + i);
        try {
            Thread.sleep(cooldown);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        pool.submit(d.new A(i));
    }
}

private class A implements Runnable, Comparable<A> {
    private int order;

    public A(int order) {
        this.order = order;
    }

    public void run() {
        try {
            Thread.sleep(busyTime);
        } catch (InterruptedException e) { …
Run Code Online (Sandbox Code Playgroud)

java priority-queue threadpool

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

STL优先级队列非类类型编译错误

我以为我已经弄清楚了,但是我想我错了。我的印象是,“ <...>”中的第一个元素是要存储在队列中的类型,第二个是容器类型(选择是“ vector”或“ dequeue”),第三个是是重载'()'运算符进行比较的类。基于此,我认为下面的代码应该编译,但不是:(

std::priority_queue<uint32_t*, std::vector<uint32_t*>, edgeComparator> q();

uint32_t* nodeEdge = new uint32_t[2];
nodeEdge[0] = startN;
nodeEdge[1] = 0;

q.push(nodeEdge);
Run Code Online (Sandbox Code Playgroud)

“ edgeComparator”的定义如下:

class edgeComparator
{
   public:
      bool operator() (const uint32_t*& lhs, const uint32_t*& rhs) const
      {
         return (lhs[1]>rhs[1]);
      }
};
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

./Graph.cpp: In member function `void Graph::findShortestPath()':
./Graph.cpp:148: error: request for member `push' in `q', which is of non-class type `std::priority_queue<uint32_t*, std::vector<uint32_t*, std::allocator<uint32_t*> >, edgeComparator> ()()'
Run Code Online (Sandbox Code Playgroud)

更糟糕的是,尝试“ q.empty()”时也会出现此错误

./Graph.cpp:150: error: request for member `empty' in `q', which is of non-class …
Run Code Online (Sandbox Code Playgroud)

c++ stl priority-queue

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

为什么Java PriorityQueue <T>不强制执行可比较对象

为什么Java中的PriorityQueue被定义为,

PriorityQueue<T>

而不是,

PriorityQueue<T extends Comparable<? super T>

如果不对Comparable类型的对象进行排队,它会在运行时给出ClassCastException.(如果我没有使用自定义比较器).

为什么不在编译时捕获它?

java generics collections priority-queue

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

如何使用apache kafka实现延迟队列?

如何在kafka上添加延迟作业?据我所知,它并不涉及每个消息,而是每个主题.我的工作有不同的时间表我希望他们被消费.假设一个将在接下来的4个小时内,另一个将是我12月1日等.

kafka是否有本地或其他第三方方式实现相同的支持?

我正在考虑将Redis用于延迟队列,并在其计划到达后将作业推送到kafka,但如果可能的话,我只想使用一个依赖项.

priority-queue apache-kafka

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

std :: priority_queue的模板参数是什么?

我正在查看一些STL文档.我看到以降序存储的优先级队列的语法是:

std::priority_queue<int> q ;
//gives 9 8 7 6 5 4 3 2 1  when pushed and obtained
Run Code Online (Sandbox Code Playgroud)

但是,为了以升序方式存储,它是:

std::priority_queue< int, std::vector<int>, std::greater<int> > q ;
//gives 1 2 3 4 5 6 7 8 9 when pushed and obtained
Run Code Online (Sandbox Code Playgroud)

我想知道第二个例子中额外模板参数的具体用途是什么.就像在std::vector<int>那个例子中做什么的那样?

此外,有人可以进一步解释这个声明吗?

priority_queue< pair<int ,int > , vector< pair<int ,int > > , greater< pair<int ,int > > > q ;
Run Code Online (Sandbox Code Playgroud)

c++ stl vector priority-queue c++11

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

优先级队列,为什么它仍然打印最后一个元素

这是我第一次使用queue和dequeue.这个概念很简单但我在尝试使用STL时遇到了问题.

#include <iostream>
#include <string.h>
#include <queue>
#include <ctime>
#include <stdlib.h>

using namespace std;

int main(){
    srand(time(NULL));
    priority_queue<int> pq;
    for(int i = 0; i < 10; i++){
        int t = rand() % 100;
        cout << "Pushing " << t << " on top of queue." << endl;  
        pq.push(t);
    }
    while(!pq.empty()){
        cout << pq.top() << " : is on top of queue " << endl;
        pq.pop();   
    }

    if(pq.empty()){
        cout << pq.top() << endl;
        cout << "list is empty" << endl;    
    } …
Run Code Online (Sandbox Code Playgroud)

c++ priority-queue

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

Microsoft Collections for .NET

.NET附带了一些内置集合(堆栈,队列,字典,列表等),但缺少其他常见集合,如优先级队列.在NuGet上有很多第三方收集库,但我想知道是否有一个正式的Microsoft(如现在称为BCL不可变集合System.Collections.Immutable)库,其中包含(可变的)优先级队列?

编辑:重要澄清(@rmunn评论):

这个问题并不是要求为X推荐一个库,而是在问一个事实问题,"X是否有官方的Microsoft库?"

.net c# collections f# priority-queue

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

Java:N个最高元素的集合

我需要在大量数据中找到N个最大元素.

我有:

  • 外部数据库(Cassandra)中数亿项的集合
  • 迭代这些项并找到具有最大值的项的作业

    Item largest = null;
    
    // Page through big data
    List<Item> items = getNextPage(pageSize);
    while (items.size() > 0) {
    
      // Update largest item based on values from current page
      for (Item current : items) {
        if (largest == null || largest.getValue() < current.getValue()) {
          largest = current;
        }
      }
    
      // Move to next page
      items = getNextPage(pageSize);
    }
    
    Run Code Online (Sandbox Code Playgroud)

我需要:

  • 扩展此作业以保持具有最高值的N(简称100)元素

我的方法:

  • 我正在考虑像固定大小的优先级队列

    class PQsort implements Comparator<Item> {
    
      public int compare(Item one, Item two) {
        return two.getValue() - …
    Run Code Online (Sandbox Code Playgroud)

java priority-queue highest

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