質問のタイトルの用語が間違っている場合は申し訳ありませんが、これが私がやりたいことです。 ID プロパティにより、同じタイプの各メンバーが次のように連続した順序で配置されます。
[id_town,id_country,id_planet,id_planet,id_town,id_country]
これになります:
[id_town,id_town,id_country,id_country,id_planet,id_planet]
id_ プロパティは文字列です。
質問のタイトルの用語が間違っている場合は申し訳ありませんが、これが私がやりたいことです。 ID プロパティにより、同じタイプの各メンバーが次のように連続した順序で配置されます。
[id_town,id_country,id_planet,id_planet,id_town,id_country]
これになります:
[id_town,id_town,id_country,id_country,id_planet,id_planet]
id_ プロパティは文字列です。
std::sort
カスタムコンパレータとして機能するブール述語を渡すために使用できる3番目のパラメーターがあります。仕様に従って独自のコンパレータを作成し、それを使用します。
例えば:
struct foo
{
std::string id;
foo(const std::string& _id) : id( _id ) {}
};
//Functor to compare foo instances:
struct foo_comparator
{
operator bool(const foo& lhs , const foo& rhs) const
{
return lhs.id < rhs.id;
}
};
int main()
{
std::vector<foo> v;
std::sort( std::begin(v) , std::end(v) , foo_comparator );
}
また、C++11 ではラムダを使用できます。
std::sort( std::begin(v) , std::end(v) , [](const foo& lhs , const foo& rhs) { return lhs.id < rhs.id; } );
最後に、比較演算子 (operator>
およびoperator<
) をオーバーロードして、標準ライブラリが提供する比較演算子を使用することもできstd::greater
ます。
struct foo
{
std::string id;
foo(const std::string& _id) : id( _id ) {}
friend bool operator<(const foo& lhs , const foo& rhs)
{
return lhs.id < rhs.id;
}
friend bool operator>(const foo& lhs , const foo& rhs)
{
return rhs < lhs;
}
friend bool operator>=(const foo& lhs , const foo& rhs)
{
return !(lhs < rhs);
}
friend bool operator<=(const foo& lhs , const foo& rhs)
{
return !(lhs > rhs);
}
};
int main()
{
std::vector<foo> v;
std::sort( std::begin(v) , std::end(v) , std::greater );
}