Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++로 병렬 배열(Parallel Array) 구현하기


병렬 배열(parallel array)은 여러 개의 배열을 하나의 논리적 구조로 묶어 사용하는 자료 표현 방식입니다. 각 배열은 모두 동일한 크기를 가지며, 같은 인덱스 위치에 있는 요소들은 서로 연관되어 있어 하나의 공통된 개체(entity)를 나타냅니다.

병렬 배열의 예시

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++ 프로그램 예제입니다.

예제 코드

#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

코드 상세 설명

먼저 직원의 이름, 부서, 급여를 각각 저장하는 세 개의 배열을 선언합니다. 이 세 배열이 서로 인덱스를 기준으로 연결되는 병렬 배열을 이룹니다.

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

이후 for 반복문으로 배열 전체를 순회하면서 최고 급여를 찾아 max 변수에 저장하고, 해당 급여가 위치한 인덱스를 index 변수에 기록합니다. sizeof(empSal)/sizeof(empSal[0]) 계산식은 배열의 전체 바이트 크기를 요소 하나의 크기로 나누어 배열 길이를 구하는 일반적인 방법입니다.

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

마지막으로 최고 급여와 함께, 그 급여를 받는 직원의 이름과 부서를 index를 통해 출력합니다.

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

이처럼 병렬 배열은 구조체(struct)나 클래스 없이도 여러 속성을 가진 데이터를 간단하게 다룰 수 있는 장점이 있습니다. 다만 배열의 수가 늘어나면 인덱스를 일관되게 유지하는 것이 번거로워질 수 있으므로, 데이터 구조가 복잡해지는 경우에는 구조체 사용을 고려하는 것이 좋습니다.