読者です 読者をやめる 読者になる 読者になる

今回の話

自分の備忘録として

AOJプロコンの練習をしている時にソートしたい!

・・・が,構造体のソートをしたことがなかったので今回書いてみた.

構造体のソート

vectorのソート

単純にvectorなどをソートする際には以下で簡単にできる.

#include <vector>
#include <algorithm>

vector<int> v;
 
// 昇順ソート
sort(v.begin(), v.end());

降順ソートがしたければ3番目の引数にソートの基準を入れてあげればいい.

// 降順ソート
sort(v.begin(), v.end(), std::greater<int>());

構造体のソート

int などは大小関係が決まっているためsortで並べ替えることができる.

すなわち構造体でも大小関係を決定する,または大小関係の定義をsortに渡してやればよい.

大小関係を定義する場合
struct data{
    int num;
    string str;

    bool operator<(const data& right) const{
        return num == right.num ? str < right.str : num < right.num
    }
}; 
方法を定義する場合
bool comp( const data& l, const data& r){
    return l.num == r.num ? l.str < r.str : l.num < r.num
}

上記をソートの第3引数に与えれば良い

今回は方法を定義する方法で実際に実装してみた.
ちなみに,ソートはクイックソートを使っているらしい.