1

「mystruct」を距離変数でソートしたいのですが、これを行う最も速い方法は何ですか?

struct MyStruct {
   int scale;
   bool pass;
   float distance;
};
vector<MyStruct> mystruct;
...
sort (mystruct.begin(), mystruct.begin() + mystruct.size());
//this doesn't work since is trying to sort by "MyStruct" and not by a number

もし私が持っていたら

vector<float> myfloat;
...
sort (myfloat.begin(), myfloat.begin() + myfloat.size());

その後、完全に機能します。

4

2 に答える 2

6

構造体用に独自に記述する必要がありoperator<ます。

それは次のようなものでなければなりません

bool operator<( const MyStruct& s1, const MyStruct& s2 )
{
    // compare them somehow and return true, if s1 is less than s2
    // for your case, as far as I understand, you could write
    // return ( s1.distance < s2.distance );
}

もう 1 つのオプションは関数オブジェクトを記述することですが、ここではそれほど必要ではありません。記述したoperator<方が簡単です (初心者向け)。

于 2012-07-07T14:02:41.493 に答える
5

ソート関数にファンクターを提供するか、以下の演算子を提供する必要があります。

struct MyStruct_Compare {
    bool operator()(const MyStruct& a, const MyStruct& b) {
        return a.distance < b.distance;
    }
}

std::sort(mystruct.begin(), mystruct.end(), MyStruct_Compare());

また:

bool operator<(const MyStruct& a, const MyStruct& b) {
    return a.distance < b.distance;
}

std::sort(mystruct.begin(), mystruct.end());
于 2012-07-07T14:04:59.010 に答える