ファンクタを使用して構造体HeapNode
にstd::priority_queue
を追加します。std :: priority_queueにファンクタを含む構造体が含まれています
#include <iostream>
#include <queue>
#include <algorithm>
using namespace std;
struct HeapNode
{
bool operator()(const struct HeapNode &a,const struct HeapNode &b) const
{
return b.c>=a.c;
}
double c;
double v;
}h;
int main()
{
priority_queue<struct HeapNode,vector<struct HeapNode>,h> H;
struct HeapNode a={1,2};
struct HeapNode b={3,2};
struct HeapNode c={6,2};
H.push(a);
H.push(b);
H.push(c);
}
しかし、エラーがあります。
queue.cpp: In function ‘int main()’:
queue.cpp:19:65: error: type/value mismatch at argument 3 in template parameter list for ‘template<class _Tp, class _Sequence, class _Compare> class std::priority_queue’
priority_queue<struct HeapNode,vector<struct HeapNode>,heapnode> H;
^
queue.cpp:19:65: note: expected a type, got ‘heapnode’
queue.cpp:23:4: error: request for member ‘push’ in ‘H’, which is of non-class type ‘int’
H.push(1);
^
queue.cpp:24:4: error: request for member ‘push’ in ‘H’, which is of non-class type ‘int’
H.push(2);
^
queue.cpp:25:4: error: request for member ‘push’ in ‘H’, which is of non-class type ‘int’
H.push(3);
^
私は参照を研究してきたが、私はまだstd::priority_queue
について困惑しています。
は、それぞれ比較のためのものか、一度だけですか?たぶん2倍の2倍の廃棄物は一度あれば維持可能でしょうか? – Default
@Default - なぜ使用されていないものを支払うのですか?ファンクタを使うときには何かを支払う必要がありますが、ファンクションの比較にはまったく関係しない2つのダブルは無駄です。また、データとファンクタと同じクラスを使用すると、単一責任の原則に違反しますが、それは悪化します。 – StoryTeller