gpt4 book ai didi

c++ - C++ STL中的优先级队列

转载 作者:行者123 更新时间:2023-11-30 05:34:05 24 4
gpt4 key购买 nike

我想设计一个优先级队列,其中 t[] 值较低的元素的优先级最高。这件事我能够实现。

但我还希望 s[] 值为零的元素应该在末尾(不管它们的 t[] 值如何)我该如何为此修改我的代码?

#include <bits/stdc++.h>
using namespace std;
#define ll long long

ll t[4];
ll s[4];

struct func
{
bool operator()(const ll lhs, const ll rhs) const
{
return(t[lhs] > t[rhs]);
}
};

int main(){
t[0]=2;t[1]=3;t[2]=0;t[3]=6;
s[0]=0;s[1]=0;s[2]=1;s[3]=1;
priority_queue<ll,vector<ll>,func>pq;

pq.push(0);
pq.push(1);
pq.push(2);
pq.push(3);

// for displaying

cout<<pq.top()<<endl;
pq.pop();

cout<<pq.top()<<endl;
pq.pop();

cout<<pq.top()<<endl;
pq.pop();

cout<<pq.top()<<endl;
pq.pop();
}

最佳答案

检查两者:如果 s 之一为零,则将其作为较低优先级返回,否则比较 ts:

bool operator() (const ll lhs, const ll rhs) const {
const bool leftIsZero = s[lhs] == 0;
const bool rightIsZero = s[rhs] == 0;
const bool oneIsZero = leftIsZero ^ rightIsZero;

if (oneIsZero)
return rightIsZero;

return t[lhs] > t[rhs];
}

关于c++ - C++ STL中的优先级队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34429556/

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