이 글에서는 C++ STL에서 map::get_allocator() 함수의 동작 방식, 문법 그리고 실제 예제에 대해 자세히 알아보겠습니다.
C++ STL에서 map이란?
map은 연관 컨테이너(associative container)의 하나로, 키(key)와 매핑된 값(mapped value)의 조합으로 이루어진 요소들을 특정 정렬 기준에 따라 저장하는 자료구조입니다. map 컨테이너 내부의 데이터는 항상 키를 기준으로 자동 정렬되며, 저장된 값은 각 요소의 고유한 키를 통해 접근할 수 있습니다.
map::get_allocator()란?
map::get_allocator()는 <map> 헤더 파일에 정의된 멤버 함수입니다. 이 함수는 map 컨테이너와 연관된 할당자(allocator) 객체를 가져오는 데 사용되며, 호출 시 해당 map의 할당자 객체 복사본을 반환합니다.
문법
map_name.get_allocator();
매개변수
이 함수는 어떤 매개변수도 받지 않습니다.
반환값
해당 map의 할당자(allocator) 객체를 반환합니다.
예제 1
#include <bits/stdc++.h>
using namespace std;
int main() {
map<int, int> TP;
map<int, int>::allocator_type tp = TP.get_allocator();
cout << "checking Is allocator Pair<int, int> : "
<< boolalpha << (tp == allocator<pair<int, int> >());
return 0;
}위 예제에서는 int형 키와 값을 가지는 map을 선언한 뒤, get_allocator()를 호출하여 이 map의 할당자를 얻습니다. 이후 얻어진 할당자가 pair<int, int> 타입의 표준 할당자와 동일한지 비교한 결과를 출력합니다.
출력
checking Is allocator Pair<int, int> : true
예제 2
#include <bits/stdc++.h>
using namespace std;
int main(void) {
map<char, int> TP;
pair<const char, int>* TP_pair;
TP_pair = TP.get_allocator().allocate(5);
cout << "Size after allocating is: " << sizeof(*TP_pair) * 5 << endl;
return 0;
}이번 예제에서는 get_allocator()로 얻은 할당자의 allocate() 멤버 함수를 사용해 pair<const char, int> 타입 요소 5개를 저장할 메모리를 동적으로 할당합니다. pair<char, int> 하나의 크기는 8바이트이므로, 5개 요소의 전체 크기인 40바이트가 출력됩니다.
출력
Size after allocating is: 40
정리
map::get_allocator()는 map 컨테이너 내부에서 사용되는 메모리 할당자 객체를 반환하는 간단하면서도 유용한 함수입니다. 이를 활용하면 map과 동일한 타입의 요소를 위한 메모리를 직접 할당하거나, 컨테이너의 할당 정책을 확인할 수 있습니다.