priority_queue, operator<()

解決


da  2008-03-28 21:41:08  No: 67928

『プログラミング言語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++


アキラ  URL  2008-03-28 22:06:03  No: 67929

constメンバ関数じゃないからですね

struct D {
  int p;
  bool operator<(const D& a) const { return p < a.p; }
};

int main() {
  priority_queue<D> q; // OK
}


da  2008-03-28 22:15:53  No: 67930

アキラさん、ありがとうございます。
constメンバ関数じゃないとダメなんですね。


da  2008-03-28 22:16:39  No: 67931

すみません。解決チェックを忘れました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加