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

C++で並列配列(パラレルアレイ)を実装する方法を解説

並列配列(Parallel Array)とは、複数の配列を組み合わせて1つのデータ構造として扱う手法です。各配列はすべて同じサイズを持ち、同じインデックス位置にある要素同士が互いに関連付けられています。つまり、各配列の対応する要素は、共通のエンティティ(実体)を表します。

並列配列の基本概念

並列配列の具体例を見てみましょう。

employee_name = { Harry, Sally, Mark, Frank, Judy }
employee_salary = {10000, 5000, 20000, 12000, 5000}

この例では、5人の従業員について、名前と給与という2種類の情報がそれぞれ別の配列に格納されています。たとえば employee_name[2] の「Mark」と employee_salary[2] の「20000」は、同じインデックスを持つため、同一人物に関する情報として関連付けられます。

C++による並列配列の実装例

以下に、並列配列を使った実際のC++プログラムを示します。このプログラムでは、従業員の名前・部署・給与を3つの配列で管理し、その中から最も高い給与を受け取っている従業員を検索します。

サンプルコード

#include <iostream>
#include <string>

using namespace std;
int main() {
    int max = 0, index = 0;
    string empName [ ] = {"Harry", "Sally", "Mark", "Frank", "Judy" };
    string empDept [ ] = {"IT", "Sales", "IT", "HR", "Sales"};
    int empSal[ ] = {10000, 5000, 20000, 12000, 5000 };
    int n = sizeof(empSal)/sizeof(empSal[0]);

    for(int i = 0; i < n; i++) {
        if (empSal[i] > max) {
            max = empSal[i];
            index = i;
        }
    }
    cout << "The highest salary is "<< max <<" and is earned by "
        <<empName[index]<<" belonging to "<<empDept[index]<<" department";
    return 0;
}

実行結果

上記プログラムの出力は以下の通りです。

The highest salary is 20000 and is earned by Mark belonging to IT department

プログラムの解説

1. 配列の宣言

まず、従業員の名前・部署・給与を格納するために、3つの配列を宣言しています。これらが並列配列として機能します。

string empName [ ] = {"Harry", "Sally", "Mark", "Frank", "Judy" };
string empDept [ ] = {"IT", "Sales", "IT", "HR", "Sales"};
int empSal[ ] = {10000, 5000, 20000, 12000, 5000 };

3つの配列はすべて要素数が5で統一されており、インデックス i の要素は必ず同じ従業員の情報を指します。

2. 最高給与の検索処理

次に、forループを使って給与配列を走査し、最大値を求めます。変数 max には最高額の給与が、index にはその給与が格納されているインデックス番号が保存されます。

int n = sizeof(empSal)/sizeof(empSal[0]);
for(int i = 0; i < n; i++) {
    if (empSal[i] > max) {
        max = empSal[i];
        index = i;
    }
}

ここで sizeof(empSal)/sizeof(empSal[0]) により配列の要素数を計算している点もポイントです。この式は「配列全体のバイトサイズ ÷ 1要素あたりのバイトサイズ」で要素数を求める、C++でよく使われるイディオムです。

3. 結果の出力

最後に、見つけた最高給与と、それに対応する従業員の名前および部署を出力します。index を使えば、他の並列な配列からも同じ従業員の関連情報を取り出せる点が、並列配列の利便性を示しています。

cout << "The highest salary is "<< max <<" and is earned by "<<empName[index]<<"
belonging to "<<empDept[index]<<" department";

まとめ

並列配列は、構造体やクラスを使わずに複数の関連データを手軽に管理できるシンプルな手法です。ただし、データ項目が増えるほど配列の本数が増え、整合性の維持が難しくなるというデメリットもあります。小規模なデータや学習用途には有効ですが、実務では structstd::vector を組み合わせた設計の方が保守性に優れる場合が多いでしょう。

  1. C++の並列配列(パラレルアレイ)とは?基本概念と実装例を解説

    並列配列(Parallel Array)は、「構造体配列(Structure of Arrays)」とも呼ばれるデータ構造です。 並列配列とは 定義:並列配列とは、複数の配列から構成されるデータ構造であり、各配列のi番目の要素同士が互いに密接に関連付けられ、全体で1つのエンティティ(実体)を表すものです。配列はC++言語における基本的な機能の一つであり、並列配列を作成することで、2つ以上の配列を関連付けて効率的に扱うことができます。 例: first_name = [John, Dexter, Fredd, Hank, james] last_name = [Jocab, Jonas, smi

  2. C++で配列がビトニック配列かどうかを判定するプログラム

    N個の整数からなる配列 arr[N] が与えられたとき、その配列がビトニック配列であるかどうかを判定するのが本記事のテーマです。ビトニック配列であれば「Yes its a bitonic array」と出力し、そうでなければ「No its not a bitonic array」と出力します。ビトニック配列とは、まず厳密に増加し、その後厳密に減少するような配列のことです。たとえば arr[] = {1, 2, 3, 4, 2, -1, -5} という配列は、4までは厳密に増加しており、4以降は厳密に減少しているため、ビトニック配列といえます。入力例と出力例入力arr[] = {1, 3, 5,