[解決済み] C2678 二項演算子 '<': 左側のオペランドが 'const Node' 型である演算子が見つかりません (または、受け入れ可能な変換がありません) [重複] 。
2022-02-12 20:01:13
質問
地図がどのように機能するのか、またグラフにどのように実装するのかを学んでいます。上のようなエラーが出続けています。これは、'<'が、想定していないデータより少ないデータを取っているためだと思います。
using namespace std;
struct Node {
string name;
int val;
Node(string n) {
name = n;
val = 0;
}
};
struct AdjList {
map<Node, list<Node*>> adj;
map<Node, list<Node*>>::iterator it;
int type;
AdjList(int a) {
type = a;
}
void add(Node temp) {
it = adj.end();
list <Node*> hi;
adj.insert(pair <Node, list <Node*>>(temp, hi));
}
void connect(Node *a, Node *b) {
adj.find(*a)->second.push_back(b);
if (type == 1) {
adj.find(*b)->second.push_back(a);
}
}
void connect(Node *a, vector <Node*> b) {
for (int i = 0; i < b.size(); i++) {
connect(a, b[i]);
}
}
};
解決方法は?
を定義していないため、エラーになります。
operator<
に対して
Node
クラスを (メソッドとして、あるいは非メンバー関数として) 作成します。
見てみましょう
演算子のオーバーローディングはこちら
以来
map
はキーをソートして格納するため、これらの実装が必要です。
operator<
を使用します。
実装例としては
val
で、次に
name
というように実装することになります。
#include <tuple>
inline bool operator==(const Node& lhs, const Node& rhs){
return lhs.val == rhs.val && lhs.name == lhs.name;
}
inline bool operator!=(const Node& lhs, const Node& rhs){return !operator==(lhs,rhs);}
inline bool operator< (const Node& lhs, const Node& rhs){
// std::tuple's lexicographic ordering does all the actual work for you
// and using std::tie means no actual copies are made
return std::tie(lhs.val, lhs.name) < std::tie(rhs.val, rhs.name);
}
inline bool operator> (const Node& lhs, const Node& rhs){return operator< (rhs,lhs);}
inline bool operator<=(const Node& lhs, const Node& rhs){return !operator> (lhs,rhs);}
inline bool operator>=(const Node& lhs, const Node& rhs){return !operator< (lhs,rhs);}
関連
-
[解決済み】C++エラー。アーキテクチャ x86_64 に対して未定義のシンボル
-
[解決済み】変数 '' を抽象型 '' と宣言できない。
-
[解決済み】Cygwin Make bash コマンドが見つかりません。
-
[解決済み] error: 'if' の前に unqualified-id を期待した。
-
[解決済み】'cout'は型名ではない
-
[解決済み] 式はクラス型を持つ必要があります。
-
[解決済み】リンカーエラーです。"リンカ入力ファイルはリンクが行われていないため未使用"、そのファイル内の関数への未定義参照
-
[解決済み】C++の余分な資格エラー
-
[解決済み】ファイルから整数を読み込んで配列に格納する C++ 【クローズド
-
[解決済み] gdbを使用してもデバッグシンボルが見つからない
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】getline()が何らかの入力の後に使用されると動作しない 【重複あり
-
[解決済み】クラステンプレートの引数リストがない
-
[解決済み】C++コンパイルタイムエラー:数値定数の前に期待される識別子
-
[解決済み] 式はクラス型を持つ必要があります。
-
[解決済み】#include<iostream>は存在するのですが、「識別子 "cout "は未定義です」というエラーが出ます。なぜですか?
-
[解決済み】クラステンプレートの使用にはテンプレート引数リストが必要です
-
[解決済み] [Solved] インクルードファイルが開けません。'stdio.h' - Visual Studio Community 2017 - C++ Error
-
[解決済み】1つ以上の多重定義されたシンボルが見つかる
-
[解決済み】標準ライブラリにstd::endlに相当するタブはあるか?
-
[解決済み】'std::cout'への未定義の参照