본문 바로가기
IT, 컴퓨터

[C++] 자료구조 pair의 원리와 사용 방법

by 별찌파파 2024. 1. 2.
728x90
반응형
SMALL

Photo by Markus Spiske on Unsplash

pair의 특징

C++에서 std::pair는 두 값을 하나의 쌍으로 묶어서 관리할 수 있는 표준 라이브러리 클래스입니다. std::pair의 주요 특징은 다음과 같습니다:

  1. 헤더 파일:
    • std::pair는 <utility> 헤더 파일에 정의되어 있습니다. 따라서 사용하기 전에 이 헤더 파일을 include해야 합니다.
      #include <utility>​
  2. 두 가지 값의 저장:
    • std::pair는 두 가지 서로 다른 타입의 값을 저장할 수 있습니다. 이를 통해 두 값 간의 논리적인 연결을 표현할 때 편리하게 사용할 수 있습니다.
      std::pair<int, double> myPair(10, 3.14);​
  3. 구조화된 반환 값:
    • 함수에서 두 가지 이상의 값을 반환하려는 경우, std::pair를 사용하여 구조화된 반환 값을 쉽게 처리할 수 있습니다.
      std::pair<int, double> myFunction() {
          // ...
          return std::make_pair(42, 3.14);
      }​
  4. 비교 연산자 지원:
    • std::pair는 비교 연산을 지원합니다. ==, !=, <, <=, >, >= 등의 비교 연산자를 사용하여 두 쌍을 비교할 수 있습니다.
      std::pair<int, double> pair1(10, 3.14);
      std::pair<int, double> pair2(20, 6.28);
      
      if (pair1 < pair2) {
          // ...
      }​
  5. 멤버 함수:
    • std::pair는 다양한 멤버 함수를 제공합니다. 예를 들어, first 및 second 멤버 함수를 사용하여 첫 번째와 두 번째 요소에 직접 접근할 수 있습니다.
      std::pair<int, double> myPair(10, 3.14);
      int firstValue = myPair.first;    // 10
      double secondValue = myPair.second;  // 3.14​
  6. 편리한 생성 함수:
    • std::make_pair 함수를 사용하여 std::pair를 생성할 수 있습니다. 이는 타입을 명시하지 않아도 자동으로 유추합니다.
      auto myPair = std::make_pair(42, 3.14);​


std::pair는 여러 상황에서 두 값의 그룹화와 반환 등 다양한 용도로 사용됩니다. 추가로 C++11 이후에는 std::tuple이나 구조체 등도 사용되어 더 복잡한 데이터 구조를 다룰 수 있습니다.

 

pair의 예제

 

다음은 C++에서 std::pair를 사용한 간단한 예제입니다. 이 예제에서는 두 가지 다른 데이터 타입을 가진 값을 std::pair로 묶어 활용합니다.

#include <iostream>
#include <utility>

int main() {
    // 예제 1: 두 가지 서로 다른 데이터 타입의 값을 저장하는 pair
    std::pair<int, double> myPair1(42, 3.14);

    // 예제 2: make_pair를 사용하여 pair 생성
    auto myPair2 = std::make_pair("Hello", 7);

    // 예제 3: pair를 사용하여 함수에서 두 가지 값을 반환
    std::pair<std::string, int> result = getValues();
    std::cout << "String: " << result.first << ", Integer: " << result.second << std::endl;

    // 예제 4: 비교 연산자를 사용하여 두 pair 비교
    std::pair<int, double> pairA(10, 2.5);
    std::pair<int, double> pairB(20, 5.0);

    if (pairA < pairB) {
        std::cout << "pairA is less than pairB" << std::endl;
    } else {
        std::cout << "pairA is greater than or equal to pairB" << std::endl;
    }

    return 0;
}

// 예제 3에서 사용할 함수 정의
std::pair<std::string, int> getValues() {
    // 실제로는 여러 가지 로직이 있을 수 있음
    return std::make_pair("World", 42);
}

이 예제에서는 std::pair를 사용하여 간단한 값들을 묶어 표현하고, 함수에서 두 가지 값을 반환하는 용도로 활용하고 있습니다. 비교 연산자를 사용하여 두 std::pair를 비교하는 부분도 포함되어 있습니다. 다음은 두 가지 서로 다른 데이터 타입을 가진 값을 std::pair로 묶어 사용하는 좀 더 구체적인 예제입니다. 이 예제에서는 학생의 이름과 성적을 std::pair를 이용하여 저장하고 출력하는 간단한 프로그램입니다.

 

#include <iostream>
#include <utility>
#include <vector>

// 학생 이름과 성적을 저장하는 함수
std::pair<std::string, int> recordGrade(const std::string& name, int score) {
    return std::make_pair(name, score);
}

int main() {
    // 학생들의 이름과 성적을 pair로 저장하는 벡터
    std::vector<std::pair<std::string, int>> studentGrades;

    // 학생들의 이름과 성적을 저장
    studentGrades.push_back(recordGrade("Alice", 90));
    studentGrades.push_back(recordGrade("Bob", 85));
    studentGrades.push_back(recordGrade("Charlie", 95));

    // 저장된 학생 정보 출력
    std::cout << "Student Grades:" << std::endl;
    for (const auto& student : studentGrades) {
        std::cout << "Name: " << student.first << ", Score: " << student.second << std::endl;
    }

    return 0;
}

이 예제에서는 학생의 이름과 성적을 std::pair<std::string, int>로 저장하고, 이를 벡터에 추가하여 여러 학생의 정보를 관리합니다. 함수 recordGrade는 학생의 이름과 성적을 받아 std::pair로 묶어 반환하는 역할을 합니다. 프로그램은 저장된 학생 정보를 출력하는 부분이 포함되어 있습니다.

728x90
반응형
LIST