从数组到优先队列
From array to priority queue
我有从这个结构创建的数组中的项目:
struct ks{
int cap;
int val;
};
数组名为 items 并包含 quantity 个项目。
items = new ks[quantity];
我想将它们放在优先队列中 - 这基本上意味着对它们进行排序。
这是我的比较函数:
struct itemsCompare{
bool operator () (const ks &item1, const ks &item2){
if (item1.val/item1.cap > item2.val/item2.cap) return true;
return false;
}
};
这个队列的创建应该是什么样的?
priority_queue <ks, What should I put here?, itemsCompare> comparedItems;
for(int i=0; i<quantity; i++) comparedItems.push(items[i]);
我知道,该模板需要将矢量作为容器。我应该如何修改代码以使其工作?我知道我可以在声明优先级队列之前将项目放入 vector 中,但我很好奇是否有一种方法可以只用数组来做到这一点。
按要求回答问题:
std::priority_queue <ks, std::vector<ks>, itemsCompare> comparedItems;
不过,这个问题有些问题没有直接问。首先,它对不受控制的物质进行了划分:)。如果除以 0 会发生什么?
其次。您将整数除以整数。这个结果总是整数,不知何故我怀疑这是你想要的。
要从数组创建 std::priorty_queue
,您可以使用
std::priority_queue <ks, std::vector<ks>, itemsCompare> comparedItems(items, items + quantity);
我有从这个结构创建的数组中的项目:
struct ks{
int cap;
int val;
};
数组名为 items 并包含 quantity 个项目。
items = new ks[quantity];
我想将它们放在优先队列中 - 这基本上意味着对它们进行排序。
这是我的比较函数:
struct itemsCompare{
bool operator () (const ks &item1, const ks &item2){
if (item1.val/item1.cap > item2.val/item2.cap) return true;
return false;
}
};
这个队列的创建应该是什么样的?
priority_queue <ks, What should I put here?, itemsCompare> comparedItems;
for(int i=0; i<quantity; i++) comparedItems.push(items[i]);
我知道,该模板需要将矢量作为容器。我应该如何修改代码以使其工作?我知道我可以在声明优先级队列之前将项目放入 vector 中,但我很好奇是否有一种方法可以只用数组来做到这一点。
按要求回答问题:
std::priority_queue <ks, std::vector<ks>, itemsCompare> comparedItems;
不过,这个问题有些问题没有直接问。首先,它对不受控制的物质进行了划分:)。如果除以 0 会发生什么?
其次。您将整数除以整数。这个结果总是整数,不知何故我怀疑这是你想要的。
要从数组创建 std::priorty_queue
,您可以使用
std::priority_queue <ks, std::vector<ks>, itemsCompare> comparedItems(items, items + quantity);