簡體   English   中英

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之一為零,則將其作為較低優先級返回,否則比較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];
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM