gpt4 book ai didi

c++ - 如何从具有相应优先级队列的列表中删除元素?

转载 作者:搜寻专家 更新时间:2023-10-31 01:50:34 26 4
gpt4 key购买 nike

我有一个 std::对象列表,比如兔子。每只兔子都有两个属性:ID 和重量。并且在这个列表中rabbits是按照ID的顺序排列的。然后,我使用 std::priority_queue 按重量顺序存储指向该兔子列表的指针。

现在我要使用这个 priority_queue 删除 priority_queue 和 original 列表中最轻的 N 只兔子。 问题是:如何在原始列表中删除?
示例代码:

#include <queue>
using namespace std;
list<Rabbit> rabbitArmy;
priority_queue<Rabbit, vector<Rabbit*>, CompareWeight> rabbitSortByWeight;


for (int i = 0; i < 999; i++) {

.....

// each rabbit has different ID and Weight, codes omitted
Rabbit rabbit(randomID, randomWeight);
rabbitArmy.push_back(rabbit);
rabbitSortByWeight.push(&rabbitArmy.back());
}


// Now I'll delete N lightest rabbits in the priority_queue
for (int i = 0; i < N; i++)

rabbitSortByWeight.pop();

原始列表呢?

顺便说一句,如果我有一个列表,那么我想把它放在priority_queue中,有没有比一个接一个地推送元素更好的方法?

最佳答案

为什么不简单地使用 top std::priority_queue 的方法获取即将弹出的元素的值并使用 remove std::list 的方法?

例如(假设队列存储指向列表元素的指针:

myList.remove(*(myQueue.top());

或者(如果队列也存储引用):

myList.remove(myQueue.top());

关于c++ - 如何从具有相应优先级队列的列表中删除元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14868950/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com