[ad_1]
だから私はクラスノード(名前、ベクトル、距離、前)を持っていて、それを距離で並べ替えたいと思っています。 そして、ソートや演算子などのいくつかの方法を使用しましたが、何も機能しないようです。 クラスのベクトルをソートする他の方法はありますか?
私が試したこと:
私も使いました
sort( test.begin(), test.end(), [](const node &a, const node &b){ return (a.distanceToStart < b.distanceToStart);});
しかし、ラムダエラーコードが表示されます。
error: no match for call to '(main()::<lambda(const node&,="" const="" node&)="">) (node*&, node*&)' 158 | { return bool(_M_comp(*__it1, *__it2)); }
node a = node("a",{}, 15, &a); node b = node("b",{}, 14, &a); node c = node("c",{}, 25, &a); node d = node("d", {}, 1, &a); node e = node("e", {}, INT_MAX, &a);
#include <iostream> #include <vector> using namespace std; class edge; class node{ public: string name; node* prev; vector<edge*> edges; int distanceToStart; node(string name, vector<edge*> edges, int distanceToStart, node* prev){ this ->distanceToStart = distanceToStart; this ->edges = edges; this ->name = name; this ->prev = prev; } int getDistanceToStart(){ return distanceToStart; } void setDistanceToStart(int d){ distanceToStart = d; } };
解決策 1
を追加しました main
上記のコードを次のように機能させます。
C++
// .. QB's code up to here #include <algorithm> int main() { vector<node> test; sort( test.begin(), test.end(), [](const node &a, const node &b){ return (a.distanceToStart < b.distanceToStart);}); }
これは、GCC、Clang、MSVC を使用してエラーなしでコンパイルされます。 ラムダを修正できたか、コード内に問題を引き起こしている何かがあるかのどちらかです。 おそらく、削除することから始めてください using namespace std;
ディレクティブを作成し、明示的に使用します std
必要に応じて名前空間。
クラスの個別のコンパイルを使用している場合は、次のようにするべきではありません。 using namespace std;
クラスヘッダーファイル内。 そうすることは、 #include "myclass.hpp"
また、すべての std 名前空間もインポートされるため、予期しない結果が生じる可能性があります。
[ad_2]
コメント