C++ 構造体のソート
今回の話
自分の備忘録として
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引数に与えれば良い
今回は方法を定義する方法で実際に実装してみた.
ちなみに,ソートはクイックソートを使っているらしい.