だから私はタイプの構造体で優先キューを作ることができないことを知っていますが、その理由を正確には理解していませんか?あなたが独自の型を作るためのテンプレートクラスを作ることができれば、どうしてstructが違うのでしょうか?structオブジェクトの優先度キューを作成できないのはなぜですか?
これは私のコードはmain.cppにで次のようになります。
#include <iostream>
#include <queue>
#include <string>
struct DATA {
std::string key;
int data;
};
int main() {
std::priority_queue<DATA> priorityQ;
DATA newItem;
newItem.key = "apples";
newItem.data = 3;
priorityQ.push(newItem);
std::cout << priorityQ.top().key << std::endl;
std::cout << "Press the 'ENTER' key to continue...";
std::cin.get();
return 0;
}
エラーが思い付く:
Error C2678 binary '<': no operator found which takes a left-hand
operand of type 'const DATA' (or there is no acceptable conversion)
TestProj c:\program files (x86)\microsoft visual studio
14.0\vc\include\xstddef Line: 240
私はこの演算子のオーバーロードを作ってみました:
bool operator<(const DATA& a, const DATA& b) {
return a.data > b.data;
}
しかし、それはまだコンパイルされません...
私の質問です:優先度のキューに構造体オブジェクトを配置することは可能ですか?そうでない場合、なぜですか?
'演算子<'過負荷があなたが必要とするすべてである必要があります。どこに置いたのですか?あなたは 'priority_queue'を作る前に定義しましたか、それとも少なくとも宣言しましたか? –
http://ideone.com/FISfMN –
ああ!私はそんなにばかげている、これは私がそれを理解しようと長い間(私は作業しているより大きなプロジェクトからこれを単純化したので)私を取ったが、ヘッダーファイルに演算子のオーバーロード関数を宣言し、構造体の前に宣言されています....構造体と主体の間で移動し、作業しています...ありがとう –