map(2)

정혜창·2025년 1월 2일

독학

목록 보기
19/28

이번 도서관 관리 시스템 구현 과제는 map이란 컨테이너를 필수적으로 써야한다. 기본강의로 배우기도 했고 간단하게 정리도 했지만 아직 많이 부족해서 기본개념 확립 및 보충공부를 하기위해 정리해본다.

std::map 이란?

  • std::map 은 데이터를 키(key)값(value) 형태로 저장하는 C++의 컨테이너이다. 예를 들어 이번과제에선 책 제목을 키로, 저자 이름을 값으로 저장할 수 있겠다.

  • 자동 정렬 : 삽입 되는 데이터가 키를 기준으로 정렬된다. 기본적으로 오름차순정렬(Red - Black Tree 균형 이진 검색트리 기반)

std::unordered_map 이란?

  • std::unordered_mapstd::map과 매우 비슷하지만, 데이터가 정렬되지 않는다.

  • 대신, 내부적으로 해시 테이블을 사용해서 검색속도가 더 빠르다.

    • std::map의 검색 속도 : O(log N) (로그함수 그래프 생각하면 쉽다. 자료가 아무리 많아지면 하나의 값에 수렴할 정도로 자료가 많을 때 효율이 매우 좋다)

    • std::unordered_map 의 검색속도 O(1) 평균적으로 매우 빠름. 자료가 적든 많든 일정 절차를 거치면 무조건 찾아냄. 가장 빠른 속도


std::pair 란?

  • std::pair"두 개의 데이터"를 묶어서 관리하는 클래스 템플릿이다. 이번 과제에서는 "책 제목"과 "저자 이름"을 한 쌍으로 저장할 수 있겠다.

  • 예제 : first, second는 pair의 객체, mypair 멤버변수에 접근하는 것이다. 매개변수 생성자로 (1, "Hello")로 초기화하는 것.

#include <utility> // pair 사용을 위한 헤더

std::pair<int, std::string> mypair(1, "Hello");
std::cout << mypair.first << std::endl; // 첫 번째 값: 1
std::cout << mypair.second << std::endl; // 두 번째 값: "Hello"

insert() 란?

  • insert()std::map에 새로운 키-값 쌍을 추가할 때 사용하는 함수이다.

  • 예제

std::map<std::string, int> scores;

scores.insert(std::make_pair("Alice", 90));
scores.insert(std::make_pair("Bob", 85));
  • insertmap의 멤버함수 이다. 주어진 요소를 map에 추가하는 역할을 하는데 이때 추가되는 요소는 std::pair 형태이다.

  • insert는 삽입하려는 std::pair 객체를 매개변수로 받는데 이 pair 객체는 std::map 에 키-값 쌍을 저장하는데 사용되는 객체이다.

  • 여기서 make_pairpair 객체를 간편하게 생성하는 함수인데 두 값을 받아서 std::pair 객체를 자동 생성한다.

scores.insert(std::make_pair("Alice", 90));은 다음과 동일하다

scores.insert(std::pair<std::string, int> mypair("Alice", 90));
scores.insert({"Alice, 90}); // 매우 간편.( C++11 부터 지원되는 초기화 목록을 활용한 방식 )

타입도 명시해줘야 하고 코드가 길어지므로 매우 불편해짐. make_pair함수를 적극적으로 쓰자! 타입도 자동으로 추론해줌.

profile
Unreal 1기

0개의 댓글