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

C++ STL unordered_multimap swap() 함수 사용법과 예제 총정리

C++ STL의 unordered_multimap swap() 함수는 크기와 타입이 같은 두 컨테이너 사이에서 요소들을 서로 맞바꾸는 데 사용됩니다. 이 함수를 호출하면 한 컨테이너의 모든 요소가 다른 컨테이너로 이동하고, 그 반대 역시 동시에 이루어집니다. unordered_map과 unordered_multimap 모두 동일한 방식으로 swap()을 지원합니다.

swap() 함수의 주요 특징

  • 두 컨테이너의 내용 전체를 한 번에 교환합니다.
  • 내부적으로 해시 테이블 구조 자체를 맞바꾸므로 시간 복잡도는 상수 시간 O(1)로 매우 효율적입니다.
  • swap 이후에도 기존 반복자(iterator), 참조(reference), 포인터는 유효하며, 이제 반대편 컨테이너의 요소를 가리키게 됩니다.

알고리즘

시작
    빈 맵 컨테이너 m, m1을 선언한다.
    m, m1 컨테이너에 각각 값을 삽입한다.
    swap() 함수를 호출하여 m과 m1의 값을 교환한다.
    교환된 m 컨테이너의 값을 출력한다.
    교환된 m1 컨테이너의 값을 출력한다.
끝.

예제 코드

#include<iostream>
#include <bits/stdc++.h>
using namespace std;

int main() {
    unordered_map<char, int> m, m1; // m, m1을 빈 맵 컨테이너로 선언

    m.insert(pair<char, int>('b', 10)); // 맵 컨테이너에 값 삽입
    m.insert(pair<char, int>('c', 30));
    m.insert(pair<char, int>('d', 40));
    m1.insert(pair<char, int>('a', 20));
    m1.insert(pair<char, int>('e', 70));
    m1.insert(pair<char, int>('f', 60));

    m.swap(m1); // 두 맵 컨테이너의 값을 교환

    cout << "\n 첫 번째 컨테이너의 키와 값:";
    for (auto it = m.begin(); it != m.end(); it++) {
        cout << "{" << it->first << ", " << it->second << "} "; // 교환된 m의 값 출력
    }

    cout << "\n 두 번째 컨테이너의 키와 값:"; // 교환된 m1의 값 출력
    for (auto it = m1.begin(); it != m1.end(); it++) {
        cout << "{" << it->first << ", " << it->second << "} ";
    }
    return 0;
}

실행 결과

첫 번째 컨테이너의 키와 값: {f, 60} {a, 20} {e, 70}
두 번째 컨테이너의 키와 값: {d, 40} {b, 10} {c, 30}.

위 실행 결과에서 볼 수 있듯이, swap() 호출 이후 m에는 원래 m1에 있던 {a, 20}, {e, 70}, {f, 60}이 들어가고, m1에는 원래 m에 있던 {b, 10}, {c, 30}, {d, 40}이 들어갑니다. unordered 컨테이너는 해시 기반으로 저장되기 때문에 출력 순서는 실행 환경에 따라 달라질 수 있습니다.

정리

unordered_multimap의 swap() 멤버 함수는 요소를 하나씩 복사하는 대신 컨테이너의 내부 구조를 통째로 맞바꾸기 때문에 매우 빠릅니다. 대용량 데이터를 다룰 때 임시 객체나 복사 비용 없이 두 컨테이너의 내용을 즉시 교환해야 하는 경우에 유용하게 활용할 수 있습니다.