我有一个priority_queue
的结构指针,我想得到一些"活跃的"最少" val"值。这是我发现的,但它并不关心节点'活动,但只给予元素最小值。
#include<bits/stdc++.h>
using namespace std;
struct node{
long long val;
bool active;
};
struct Compare
{
bool operator()(const node *a,const node *b)const
{
if(a->active == b->active)
return (a->val) > (b->val);
if(a->active)
return 1;
return 0;
}
};
typedef priority_queue<node*, vector<node*> ,Compare > PQ;
int main()
{
PQ q;
int n;
cin >> n;
for(int i=1;i<=n;i++)
{
int x;
cin >> x;
node* nd=new node;
nd->val = x;
nd->active = 1;
q.push(nd);
}
node* first =q.top();
cout << "the top element is " << (first->val) << endl;
q.pop();
first->active = 0;
q.push(first);
node* second = q.top();
cout << "the next top element is " << (second->val) << endl;
cout << "the activity state of the second element is " << (second->active) << endl;
return 0;
}
更新:代码现在正常运行,并且关心节点&#39;活性
答案 0 :(得分:1)
添加后,priority_queue
中的元素无法修改。如果你想这样做,你需要pop
关闭值,修改它,然后重新push
。
答案 1 :(得分:0)
与.where('LOWER(name) LIKE LOWER(?)', "%#{agency_name}%")
一起使用的比较函数需要定义strict weak order。您的排序函数没有定义严格的弱顺序:如果对象std::priority_queue<...>
处于非活动状态(即x
为active
),您有false
但条件为Compare()(x, x) == true
(使用关系符号:Compare()(x, x) == false
,即!(x < x) == true
不小于x
)必须持有。
当不满足比较函数的约束时,x
的行为未定义。