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

C++ STL map::insert() 함수 완벽 가이드 – 문법과 예제 총정리

이 글에서는 C++ STL에서 map::insert() 함수의 동작 방식, 문법 그리고 실제 예제를 통해 맵에 요소를 삽입하는 방법을 자세히 알아보겠습니다.

C++ STL의 맵(Map)이란?

맵(map)은 연관 컨테이너(associative container)로, 키(key)와 매핑된 값(mapped value)의 쌍으로 이루어진 요소들을 특정 순서에 따라 저장할 수 있도록 지원합니다. 맵 컨테이너 내부의 데이터는 항상 연관된 키를 기준으로 자동 정렬되며, 각 요소는 고유한 키를 통해서만 접근할 수 있습니다.

map::insert()란 무엇인가?

map::insert() 함수는 C++ STL에 내장된 함수로, <map> 헤더 파일에 정의되어 있습니다. insert()는 맵 컨테이너에 새로운 값을 삽입하는 데 사용되며, 삽입된 요소의 수만큼 컨테이너의 크기가 증가합니다.

맵 컨테이너의 키는 고유(unique)하기 때문에, 삽입 작업 시 해당 요소의 키가 이미 컨테이너에 존재하는지 먼저 확인합니다. 만약 동일한 키가 이미 있다면 그 요소는 삽입되지 않습니다.

또한 맵 컨테이너는 모든 요소를 키를 기준으로 오름차순으로 유지합니다. 따라서 요소를 삽입할 때마다 해당 요소는 자신의 키에 맞는 적절한 위치에 자동으로 배치됩니다.

문법(Syntax)

1. Map_name.insert({key& k, value_type& val});
또는
2. Map_name.insert(iterator& it, {key& k, value_type& val});
또는
3. Map_name.insert(iterator& position1, iterator& position2);

매개변수(Parameter)

이 함수는 다음과 같은 매개변수를 받습니다.

  • k − 요소와 연관된 키입니다. 함수는 해당 키가 이미 컨테이너에 존재하는지 검사하며, 존재한다면 요소를 삽입하지 않습니다.

  • val − 삽입할 값입니다.

  • it − 요소를 삽입할 위치를 지정하는 데 사용되는 반복자(iterator) 타입의 값입니다.

  • position1, position2 − 여러 요소를 한 번에 삽입할 때 사용하는 범위로, position1은 시작 위치, position2는 끝 위치를 나타냅니다.

반환값(Return Value)

이 함수는 맵 컨테이너에 새로 삽입된 요소를 가리키는 반복자(iterator)를 반환합니다.

참고로, 단일 요소를 삽입하는 첫 번째 형태의 insert()는 실제로 pair<iterator, bool>을 반환하며, pair의 두 번째 요소(bool)는 삽입이 성공했는지 여부를 나타냅니다. 이를 활용하면 중복 키로 인한 삽입 실패 여부를 손쉽게 확인할 수 있습니다.

예제

입력

map<char, int> newmap;
newmap['a'] = 1;
newmap['b'] = 2;
newmap['c'] = 3;
newmap.insert({'d', 50});

출력

a:1
b:2
c:3
d:50

예제 1: 기본적인 insert() 사용법

#include <bits/stdc++.h>
using namespace std;
int main() {
    map<int, int> TP_Map;
    TP_Map.insert({3, 50});
    TP_Map.insert({2, 30});
    TP_Map.insert({1, 10});
    TP_Map.insert({4, 70});
    cout<<"TP Map is : \n";
    cout << "MAP_KEY\tMAP_ELEMENT\n";
    for (auto i = TP_Map.begin(); i!= TP_Map.end(); i++) {
        cout << i->first << "\t" << i->second << endl;
    }
    return 0;
}

출력

TP Map is:
MAP_KEY    MAP_ELEMENT
1          10
2          30
3          50
4          70

위 예제에서 볼 수 있듯이, 요소를 삽입한 순서와 관계없이 출력 결과는 항상 키를 기준으로 오름차순으로 정렬되어 있습니다.

예제 2: 반복자를 이용한 insert()

#include <bits/stdc++.h>
using namespace std;
int main() {
    map<int, int> TP_Map;
    TP_Map.insert({3, 50});
    TP_Map.insert({2, 30});
    TP_Map.insert({1, 10});
    TP_Map.insert({4, 70});
    auto i = TP_Map.find(4);
    TP_Map.insert(i, { 5, 80 });
    cout<<"TP Map is : \n";
    cout << "MAP_KEY\tMAP_ELEMENT\n";
    for (auto i = TP_Map.begin(); i!= TP_Map.end(); i++) {
        cout << i->first << "\t" << i->second << endl;
    }
    return 0;
}

출력

TP Map is:
MAP_KEY    MAP_ELEMENT
1          10
2          30
3          50
4          70
5          80

두 번째 예제에서는 find() 함수로 얻은 반복자를 힌트(hint)로 전달하여 요소를 삽입했습니다. 힌트를 사용하면 삽입 위치를 어느 정도 지정할 수 있어 특정 상황에서 삽입 성능을 향상시킬 수 있지만, 최종적으로 요소는 여전히 키 순서에 맞는 올바른 위치에 배치됩니다.