C ++ stl中的优先级队列
Priority queue in c++ stl
我想设计一个优先级队列,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
s 之一为零,则 return 优先级较低,否则比较 t
s:
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];
}
我想设计一个优先级队列,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
s 之一为零,则 return 优先级较低,否则比较 t
s:
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];
}