LoginSignup
17
10

More than 1 year has passed since last update.

C++の降順・昇順ソート(vector, array, 配列)

Last updated at Posted at 2021-08-01

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,配列ともに同じ書き方でソートできて使いやすそうです。

17
10
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
10