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

【C++入門】STLのstd::merge()を使ってソート済み2つの配列を高速にマージする方法


本記事では、C++ STLのstd::merge()関数を使用して、ソート済みの2つの配列を素早くマージ(統合)する方法について解説します。

問題を解く前に、まずはC++ STLにおけるstd::merge()の基本から見ていきましょう。

std::merge()とは?

std::merge()は、C++標準ライブラリ(STL)の<algorithm>ヘッダーファイルで定義されている組み込み関数です。

merge()は、ソート済みの2つの範囲(レンジ)をマージするために使用され、2つのソート済み範囲を結合して、1つのソート済み範囲を生成します。すべての要素が小なり演算子(<)によって比較されるため、出力される3つ目の範囲も自動的にソートされた状態になります。

std::merge()で2つのソート済み配列を素早くマージするには?

ここでは、ソート済みの2つの配列 arr1[]arr2[] が与えられ、C++ STLで利用可能な merge() 関数を使って、これらを別の空の配列(例:arr3[])にマージして格納することを目標とします。

手順

  • まず、両方の配列のサイズを計算します(arr[size_arr]brr[size_brr])。次に、両方のサイズの合計を要素数とする3つ目の配列 final[size_arr + size_brr] を定義します。

  • 続いて、merge(arr, (arr + size_arr), brr, (brr + size_brr), final); のように merge() 関数を呼び出し、2つの配列を3つ目の配列へマージします。

サンプルコード

#include <iostream>
#include <algorithm>
using namespace std;
int main(){
    int arr[] = {1, 2, 3};
    int size_arr = sizeof(arr)/sizeof(arr[0]);
    int brr[] = {4, 5, 6};
    int size_brr = sizeof(brr)/sizeof(brr[0]);
    int final[size_arr + size_brr];
    merge(arr, (arr + size_arr), brr, (brr + size_brr), final);
    cout<<"マージ後の最終配列: ";
    for (int i = 0; i < (size_brr + size_arr); i++)
        cout << final[i] << " ";
    return 0;
}

実行結果

マージ後の最終配列: 1 2 3 4 5 6

このように、std::merge()を活用すれば、ソート済みの2つの配列をわずか数行のコードで効率的に統合できます。マージ処理の計算量はO(n+m)(nとmはそれぞれの配列の要素数)であり、非常に高速です。

  1. C#でソート済みの2つの配列をリストにマージする方法

    C#では、ソート済みの2つの配列を1つのリストに簡単にマージ(結合)することができます。この記事では、基本的な手順とサンプルコードを使って、その方法をわかりやすく解説します。 マージの手順 まず、マージ対象となる2つのソート済み配列を用意します。以下はその例です。 int[] array1 = { 1, 2 }; int[] array2 = { 3, 4 }; 次に、List<int> のインスタンスを作成し、forループを使って両方の配列の要素を交互にリストへ追加していきます。 var list = new List<int>(); for (int i

  2. Pythonのheapqモジュールを使って2つのソート済みリストをマージする方法

    この記事では、Pythonのheapqモジュールを使用して、2つのソート済みリストを1つにマージする方法を解説します。例えば、list1 = [10, 20, 30, 40]とlist2 = [100, 200, 300, 400, 500]という2つのリストがある場合、マージ後は[10, 20, 30, 40, 100, 200, 300, 400, 500]のような結果が得られます。heapqモジュールとはheapqはPythonに標準で搭載されているライブラリモジュールのため、追加のインストールは不要です。利用する前にインポートするだけで使えます。import heapqheapqモジュ