我发现了一个主要用于CFBinaryHeap工作的优先级队列的实现.
我目前正在使用-fno-objc-arc编译器标志在编译这些文件时跳过ARC的使用.我尝试更新此代码以利用ARC,尽管我遇到了一些理解障碍.
这里有没有人更新类似于此的代码用于ARC?
你如何处理之类的东西free(),和CFRelease()?我们可以摆脱它们吗?
你有什么用做retain和release你创建的方法CFBinaryHeapCallBacks?
您是否使用__bride或__bridge_transfer引用const void *Objective-C对象?同样,你应该使用(__bridge_retained void *)或obj_unretainedPointer()反过来吗?
objective-c priority-queue core-foundation ios automatic-ref-counting
我有两个结构(部分任务).一个列表 - 活动,包含在另一个 - 流程中.然后,几个父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) 请假设以下内容:
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) 我以为我已经弄清楚了,但是我想我错了。我的印象是,“ <...>”中的第一个元素是要存储在队列中的类型,第二个是容器类型(选择是“ 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) 为什么Java中的PriorityQueue被定义为,
PriorityQueue<T>
而不是,
PriorityQueue<T extends Comparable<? super T>
如果不对Comparable类型的对象进行排队,它会在运行时给出ClassCastException.(如果我没有使用自定义比较器).
为什么不在编译时捕获它?
如何在kafka上添加延迟作业?据我所知,它并不涉及每个消息,而是每个主题.我的工作有不同的时间表我希望他们被消费.假设一个将在接下来的4个小时内,另一个将是我12月1日等.
kafka是否有本地或其他第三方方式实现相同的支持?
我正在考虑将Redis用于延迟队列,并在其计划到达后将作业推送到kafka,但如果可能的话,我只想使用一个依赖项.
我正在查看一些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) 这是我第一次使用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) .NET附带了一些内置集合(堆栈,队列,字典,列表等),但缺少其他常见集合,如优先级队列.在NuGet上有很多第三方收集库,但我想知道是否有一个正式的Microsoft(如现在称为BCL不可变集合System.Collections.Immutable)库,其中包含(可变的)优先级队列?
编辑:重要澄清(@rmunn评论):
这个问题并不是要求为X推荐一个库,而是在问一个事实问题,"X是否有官方的Microsoft库?"
我需要在大量数据中找到N个最大元素.
我有:
迭代这些项并找到具有最大值的项的作业
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)我需要:
我的方法:
我正在考虑像固定大小的优先级队列
class PQsort implements Comparator<Item> {
public int compare(Item one, Item two) {
return two.getValue() - …Run Code Online (Sandbox Code Playgroud)priority-queue ×10
c++ ×4
java ×3
collections ×2
stl ×2
.net ×1
apache-kafka ×1
c# ×1
c++11 ×1
f# ×1
generics ×1
highest ×1
ios ×1
list ×1
objective-c ×1
threadpool ×1
vector ×1