c++のソートについて
最近c++の勉強を始めたのですが、ソート(降順、昇順)につまづいたので備忘録として残します。
調べたのはvector型、array型および配列の3種類です。
結論
(ベクトル型)
・昇順にソートする場合はsort(ベクトル型.begin(), ベクトル型.end())
と書きます。
・降順にソートしたい場合には、sort(ベクトル型.rbegin(), ベクトル型.rend())
とソートします。
(array型)
・昇順にソートする場合はsort(array型.begin(), array型.end())
と書きます。
・降順にソートしたい場合には、sort(array型.rbegin(), array.rend())
とソートします。
(配列)
・昇順でソートする場合はsort(配列, 配列+配列の長さ)
と書きます。
・降順でソートする場合はsort(配列, 配列+配列の長さ, greater<int>())
と書きます。
テスト
vector型のソート
vector型はvector<型>
というように定義します。
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main(){
vector<int> vec;
vec = {10,30,20,50,40}; //ソートしたい数字列
//ソート(昇順)
sort(vec.begin(), vec.end());
for (int i=0;i<5;i++){
cout << vec[i] << " ";
if (i==4) cout <<endl; //改行
}
cout << endl;
//ソート(降順)
sort(vec.rbegin(), vec.rend());
for(int i=0;i<5;i++){
cout << vec[i] << " ";
if (i==4) cout <<endl; //改行
}
return 0;
}
//出力結果
10 20 30 40 50
50 40 30 20 10
arrray型のソート
array型はarray<型, 要素数>
の形で定義します。
#include<iostream>
#include<algorithm>
#include<array>
using namespace std;
int main(){
array<int, 5> arr;
arr = {10,30,20,50,40}; //ソートしたい数字列
//ソート(昇順)
sort(arr.begin(), arr.end());
for (int i=0;i<5;i++){
cout << arr[i] << " ";
if (i==4) cout <<endl; //改行
}
cout << endl;
//ソート(降順)
sort(arr.rbegin(), arr.rend());
for(int i=0;i<5;i++){
cout << arr[i] << " ";
if (i==4) cout <<endl; //改行
}
return 0;
}
//出力結果
10 20 30 40 50
50 40 30 20 10
配列のソート
int x[n]
という形で定義する配列のソートです。
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int x[5] = {10,30,20,50,40};; //ソートしたい数字列
//ソート(昇順)
sort(x, x+5);
for (int i=0;i<5;i++){
cout << x[i] << " ";
if (i==4) cout <<endl; //改行
}
cout << endl;
//ソート(降順)
sort(x, x+5, greater<int>());
for(int i=0;i<5;i++){
cout << x[i] << " ";
if (i==4) cout <<endl; //改行
}
return 0;
}
//出力結果
10 20 30 40 50
50 40 30 20 10
備考
http://stlalv.la.coocan.jp/sort.html
https://note.com/memenekokaburi/n/na7dab7417e98
間違いなどがあれば教えていただけると幸いです。
追記(2020/08/01)
@mitayuki6 さんに以下の書き方も教えていただきました。ありがとうございます!
//ソート(昇順)
sort(std::begin(vec), std::end(vec));
sort(std::begin(arr), std::end(arr));
sort(std::begin(x), std::end(x));
//ソート(降順)
sort(std::rbegin(vec), std::rend(vec));
sort(std::rbegin(arr), std::rend(arr));
sort(std::rbegin(x), std::rend(x));
vector,array,配列ともに同じ書き方でソートできて使いやすそうです。