『プログラミング言語C++』p.553には、
priority_queueは、デフォルトで < 演算子によって要素を比較し、top()は
最大の要素を返す。
と書かれてあります。以下のa.cppとb.cppではどちらもoperator<を定義しているつもり
ですが、a.cppの方はコンパイルが通りません。なぜですか?
// (a.cpp)コンパイルできない
#include <iostream>
#include <queue>
using namespace std;
struct D {
int p;
bool operator<(const D& a) { return p < a.p; }
};
int main() {
priority_queue<D> q; // ERROR: instantiated from here
}
// (b.cpp)コンパイルできる
#include <iostream>
#include <queue>
using namespace std;
struct D {
int p;
};
bool operator<(const D& a, const D& b) {
return a.p < b.p;
}
int main() {
priority_queue<D> q;
}
// cygwin g++
constメンバ関数じゃないからですね
struct D {
int p;
bool operator<(const D& a) const { return p < a.p; }
};
int main() {
priority_queue<D> q; // OK
}
アキラさん、ありがとうございます。
constメンバ関数じゃないとダメなんですね。
すみません。解決チェックを忘れました。
ツイート | ![]() |