std::swap
std::swap (std::unordered_multimap 특수화)
std::swap 알고리즘을 std::unordered_multimap에 대해 특수화한 함수예요. 두 unordered_multimap의 내용물을 서로 바꿔요. 내부적으로 lhs.swap(rhs)를 호출해요.
출처: cppreference
본문
<unordered_map> 헤더에 정의돼 있고, std::unordered_multimap용 swap 오버로드예요.
template< class Key, class T, class Hash, class KeyEqual, class Alloc >
void swap( std::unordered_multimap<Key, T, Hash, KeyEqual, Alloc>& lhs,
std::unordered_multimap<Key, T, Hash, KeyEqual, Alloc>& rhs ); // (until C++17)
template< class Key, class T, class Hash, class KeyEqual, class Alloc >
void swap( std::unordered_multimap<Key, T, Hash, KeyEqual, Alloc>& lhs,
std::unordered_multimap<Key, T, Hash, KeyEqual, Alloc>& rhs )
noexcept(/* see below */); // (since C++17)
lhs와 rhs의 내용물을 서로 바꿔요. 내부적으로 lhs.swap(rhs)를 호출해요.
- 매개변수
lhs,rhs: 내용물을 바꿀 컨테이너들. - 복잡도: 상수 시간.
- 예외 지정:
noexcept(noexcept(lhs.swap(rhs)))(C++17부터).
예제를 보면 swap 전후를 확인할 수 있어요.
#include <algorithm>
#include <iostream>
#include <unordered_map>
int main()
{
std::unordered_multimap<int, char> alice{{1, 'a'}, {2, 'b'}, {3, 'c'}};
std::unordered_multimap<int, char> bob{{7, 'Z'}, {8, 'Y'}, {9, 'X'}, {10, 'W'}};
auto print = [](const std::pair<int, char>& n)
{
std::cout << ' ' << n.first << ':' << n.second;
};
std::cout << "Alice:";
std::for_each(alice.begin(), alice.end(), print);
std::cout << "\nBobby:";
std::for_each(bob.begin(), bob.end(), print);
std::cout << '\n';
std::cout << "-- SWAP\n";
std::swap(alice, bob);
}
unordered_multimap의 swap은 내부 버킷 배열을 맞바꾸므로 상수 시간에 수행돼요. C++17부터 noexcept가 지정되고, C++20부터 constexpr이에요.