【解決方法】クラスのベクトルをソートする


だから私はクラスノード(名前、ベクトル、距離、前)を持っていて、それを距離で並べ替えたいと思っています。 そして、ソートや演算子などのいくつかの方法を使用しましたが、何も機能しないようです。 クラスのベクトルをソートする他の方法はありますか?

私が試したこと:

私も使いました

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 名前空間もインポートされるため、予期しない結果が生じる可能性があります。

コメント

タイトルとURLをコピーしました