Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C/C++で日付の配列をソートする方法をわかりやすく解説

プログラミングでは、複数の日付データを古い順(または新しい順)に並べ替えたい場面がよくあります。この記事では、C言語およびC++で日付の配列をソートする方法を、具体的なコード例とともに解説します。

日付データはクラスとして定義して扱います(C言語の場合は構造体を使用できます)。C++ではSTL(標準テンプレートライブラリ)に用意されている sort 関数を利用するのが便利ですが、日付同士を比較するためには、年・月・日の順に比較を行う独自の比較関数(コンパレータ)を作成する必要があります。

実装のポイント

日付の大小関係は以下の優先順位で判定します。

  • まず「年」を比較し、小さい方が前(古い日付)とする
  • 年が同じ場合は「月」を比較する
  • 月も同じ場合は「日」を比較する

サンプルコード

#include<iostream>
#include<algorithm>
using namespace std;

class Date {
    public:
        int d, m, y;
};

// 日付を比較する関数
bool compare(const Date &date1, const Date &date2){
    if (date1.y < date2.y)
        return true;
    if (date1.y == date2.y && date1.m < date2.m)
        return true;
    if (date1.y == date2.y && date1.m == date2.m && date1.d < date2.d)
        return true;
    return false;
}

void sortDateArray(Date arr[], int n) {
    sort(arr, arr+n, compare);
}

int main() {
    Date arr[] = {{20, 1, 2017},
                  {25, 3, 2010},
                  { 3, 12, 1956},
                  {18, 10, 1982},
                  {19, 4, 2011},
                  { 9, 7, 2013}};
    int n = sizeof(arr)/sizeof(arr[0]);
    sortDateArray(arr, n);
    cout << "Sorted dates are" << endl;
    for (int i=0; i<n; i++) {
        cout << arr[i].d << " " << arr[i].m << " " << arr[i].y << endl;
    }
}

実行結果

Sorted dates are
3 12 1956
18 10 1982
25 3 2010
19 4 2011
9 7 2013
20 1 2017

コードの解説

Date クラスには、日(d)、月(m)、年(y)の3つのメンバ変数を持たせています。比較関数 compare では、まず年を比較し、等しい場合にのみ月、さらに日へと比較を進めることで、正しい時系列順を実現しています。

sortDateArray 関数内では、STLの sort 関数の第3引数にこの比較関数を渡すことで、デフォルトの昇順ソートではなく、日付として意味のある順序で並べ替えが行われます。なお、compare を逆の条件に書き換えれば、新しい日付から降順にソートすることも簡単に可能です。

  1. Androidで配列の要素を並べ替える方法をわかりやすく解説

    この記事では、Androidアプリで配列の要素を並べ替え(ソート)する方法を、実際に動くサンプルコードとともに解説します。数値が入った配列を昇順に並べ替え、その結果を画面に表示するまでの一連の手順を確認していきましょう。 手順1:新規プロジェクトを作成する まず、Android Studioで新しいプロジェクトを作成します。メニューから「File」→「New Project」を選択し、必要な項目を入力してプロジェクトを作成してください。 手順2:レイアウトファイルにコードを追加する 次に、res/layout/activity_main.xml に以下のコードを記述します。 <?x

  2. 【初心者向け】C/C++における多次元配列の初期化方法をわかりやすく解説

    多次元配列とは、次元数が2以上ある配列のことです。本記事では、3×3×3の多次元配列におけるメモリ割り当ての仕組みと、実際に配列を初期化して内容を表示するC++プログラムを紹介します。下図は、次元が3×3×3の多次元配列に対するメモリ割り当ての戦略を示したものです。アルゴリズム多次元配列を初期化するプログラムは、以下の手順で構成されます。Begin 多次元配列の要素を初期化する 配列のサイズを出力する 配列の内容を表示する Endサンプルコード以下は、2行2列の二次元配列を初期化し、そのサイズと内容を出力するC++プログラムです。#include<iostream