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

C++ STL multimap::get_allocator() 함수 완벽 정리 – 개념, 문법, 예제

이 글에서는 C++ STL에서 multimap::get_allocator() 함수의 동작 방식, 문법, 그리고 실제 예제를 통해 어떻게 활용되는지 자세히 살펴보겠습니다.

C++ STL의 multimap이란?

multimap은 map 컨테이너와 유사한 연관 컨테이너(associative container)입니다. 키(key)와 매핑된 값(mapped value)의 조합으로 이루어진 요소들을 특정 순서에 따라 저장할 수 있습니다. 일반적인 map과 달리, multimap에서는 동일한 키에 여러 개의 요소를 연결할 수 있다는 점이 특징입니다. 또한 컨테이너 내부의 데이터는 항상 키를 기준으로 자동 정렬되어 관리됩니다.

multimap::get_allocator()란?

multimap::get_allocator() 함수는 C++ STL의 내장 함수로, <map> 헤더 파일에 정의되어 있습니다. 이 함수는 multimap 컨테이너에 메모리 블록(chunk)을 할당하는 데 사용되며, 해당 컨테이너와 연관된 할당자(allocator) 객체의 복사본을 반환합니다.

여기서 할당자(allocator)란 컨테이너의 동적 메모리 할당을 담당하는 객체를 의미합니다. 즉, 컨테이너가 필요로 하는 메모리를 확보하고 해제하는 역할을 수행합니다.

문법(Syntax)

multi_name.get_allocator();

매개변수(Parameters)

이 함수는 어떠한 매개변수도 받지 않습니다.

반환 값(Return Value)

이 함수는 해당 컨테이너와 연관된 할당자 객체를 반환합니다.

입력 예시

int *Ptr;
std::multimap<char, int> newmap;
newmap.insert(make_pair('A', 22));
newmap.insert(make_pair('B', 78));
newmap.insert(make_pair('C', 66));
newmap.insert(make_pair('D', 81));
Ptr = newmap.get_allocator().allocate(4);

출력 결과

ptr = A:22 B:78 C:66 D:81

예제 1

#include <iostream>
#include <map>
using namespace std;
int main(){
   int arrsize;
   multimap<char, int> mul;
   pair<const char, int>* pr;
   pr = mul.get_allocator().allocate(15);
   // 배열에 값을 할당합니다
   arrsize = sizeof(multimap<char, int>::value_type) * 10;
   cout << "Size of the allocated array is: "<< arrsize << " bytes.\n";
   mul.get_allocator().deallocate(pr, 5);
   return 0;
}

출력 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

Size of the allocated array is: 80 bytes.

multimap<char, int>의 value_type(pair<const char, int>)의 크기는 대부분의 시스템에서 8바이트이므로, 10개 요소 기준으로 계산하면 총 80바이트가 됩니다.

예제 2

#include <iostream>
#include <map>
using namespace std;
int main(){
   int arrsize;
   multimap<char, int> mul;
   pair<const char, int>* pr;
   pr = mul.get_allocator().allocate(2);
   // 배열에 값을 할당합니다
   arrsize = sizeof(multimap<char, int>::value_type) * 5;
   cout << "Size of the allocated array is: "<< arrsize << " bytes.\n";
   mul.get_allocator().deallocate(pr, 5);
   return 0;
}

출력 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

Size of the allocated array is: 40 bytes.

이번에는 value_type 크기(8바이트)에 5를 곱해 계산했으므로 총 40바이트가 출력됩니다.

정리

multimap::get_allocator()는 컨테이너의 할당자 객체에 직접 접근할 수 있게 해주는 함수로, 주로 메모리의 수동 할당(allocate)과 해제(deallocate)가 필요한 저수준(low-level) 프로그래밍 상황에서 활용됩니다. 다만 일반적인 애플리케이션 개발에서는 컨테이너가 내부적으로 메모리를 자동 관리하므로, 이 함수를 직접 사용할 일은 많지 않습니다.