Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What are the problem?
@dsy_i07

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

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
1
Help us understand the problem. What are the problem?