이 글에서는 C++ STL에서 multimap::insert() 함수의 동작 방식, 문법, 그리고 실제 활용 예제까지 자세히 살펴보겠습니다.
C++ STL에서 multimap이란?
multimap은 map 컨테이너와 유사한 연관 컨테이너(associative container)입니다. 키(key)와 값(value)이 한 쌍을 이루는 요소들을 특정 순서로 저장하며, 데이터는 내부적으로 항상 키를 기준으로 정렬됩니다.
map과의 가장 큰 차이점은 multimap은 동일한 키를 가진 여러 개의 요소를 저장할 수 있다는 점입니다.
multimap::insert()란?
multimap::insert()는 C++ STL에 내장된 함수로, <map> 헤더 파일에 정의되어 있습니다. 이 함수는 multimap 컨테이너에 새로운 값을 삽입하는 데 사용되며, 삽입된 요소 수만큼 컨테이너의 크기가 증가합니다.
일반 map은 이미 존재하는 키에 대해서는 새 요소를 삽입하지 않지만, multimap은 같은 키에 여러 요소를 연결할 수 있는 특징이 있습니다.
따라서 요소를 삽입할 때마다 해당 요소는 자신의 키에 맞는 적절한 위치에 자동으로 배치됩니다.
문법(Syntax)
multiMap_name.insert({key& k, value_type& val});또는
multiMap_name.insert(iterator& it, {key& k, value_type& val});또는
multiMap_name.insert(iterator& position1, iterator& position2);
또는
multimap_name.insert(initializer_list<value_type> il);
매개변수(Parameter)
이 함수는 다음과 같은 매개변수를 받습니다.
k − 삽입할 요소와 연결될 키입니다. multimap에서는 같은 키가 이미 존재하더라도 요소가 정상적으로 삽입됩니다.
val − 삽입하고자 하는 값입니다.
it − 요소를 삽입할 위치를 지정하는 데 사용되는 반복자(iterator)입니다.
position1, position2 − 여러 요소를 한 번에 삽입할 때 사용하는 범위입니다. position1은 시작 위치, position2는 끝 위치를 나타냅니다.
il − 컨테이너를 초기화할 요소들을 담고 있는 초기화 리스트(initializer list)입니다.
반환값(Return Value)
이 함수는 새로 삽입된 요소를 가리키는 반복자(iterator)를 반환합니다.
입력
multimap<int, char> mymap;
mymap.insert({1, 'a'});
mymap.insert({2, 'b'});
출력
1: a
2: b
예제 1: 기본적인 요소 삽입
// 주어진 키와 함께 요소 삽입하기
#include <bits/stdc++.h>
using namespace std;
int main(){
multimap<int, int> mul;
// multimap에 요소 삽입
mul.insert({ 1, 10 });
mul.insert({ 2, 20 });
mul.insert({ 3, 30 });
mul.insert({ 4, 40 });
mul.insert({ 5, 50 });
// multimap 요소 출력
cout << "Elements in multimap is : \n";
cout << "KEY\tELEMENT\n";
for (auto it = mul.begin(); it != mul.end(); ++it){
cout << it->first << '\t' << it->second << '\n';
}
return 0;
}
출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Elements in multimap is :
KEY ELEMENT
1 10
2 20
3 30
4 40
5 50
예제 2: 특정 위치에 요소 삽입
// 주어진 키 뒤에 요소 삽입하기
#include <bits/stdc++.h>
using namespace std;
int main(){
multimap<int, int> mul;
// multimap에 요소 삽입
mul.insert({ 1, 10 });
mul.insert({ 2, 20 });
mul.insert({ 3, 30 });
mul.insert({ 5, 40 });
mul.insert({ 6, 50 });
// 삽입 기준이 될 위치 탐색
auto i = mul.find(3);
mul.insert(i, { 4, 90 });
// 요소 출력
cout << "KEY\tELEMENT\n";
for (auto itr = mul.begin(); itr != mul.end(); ++itr){
cout << itr->first << '\t' << itr->second << '\n';
}
return 0;
}
출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
KEY ELEMENT
1 10
2 20
3 30
4 90
5 40
6 50
마무리
multimap::insert()는 키-값 쌍을 multimap에 추가하는 가장 기본적이면서 중요한 함수입니다. 참고로 이 함수의 평균 시간 복잡도는 O(log n)으로, 내부적으로 균형 이진 트리 구조를 사용하기 때문에 삽입 후에도 항상 키 기준으로 정렬된 상태가 유지됩니다. 반복자를 활용한 위치 지정 삽입이나 범위 삽입을 함께 익혀두면 더욱 효율적인 C++ 프로그래밍에 도움이 됩니다.