GeezerVison is showing cpprefjp.github.io — std::unordered_map::merge - cpprefjp C++日本語リファレンス
最終更新日時:
2026年09月11日 13時06分31秒 (JST)
Akira Takahashi
が更新
履歴
編集
function template
<unordered_map>
std:: unordered_map:: merge (C++17)
template < class H2 , class P2 >
void merge ( unordered_map < Key , T , H2 , P2 , Allocator >& source ); // (1) C++17
template < class H2 , class P2 >
constexpr void merge ( unordered_map < Key , T , H2 , P2 , Allocator >& source ); // (1) C++26
template < class H2 , class P2 >
void merge ( unordered_map < Key , T , H2 , P2 , Allocator >&& source ); // (2) C++17
template < class H2 , class P2 >
constexpr void merge ( unordered_map < Key , T , H2 , P2 , Allocator >&& source ); // (2) C++26
template < class H2 , class P2 >
void merge ( unordered_multimap < Key , T , H2 , P2 , Allocator >& source ); // (3) C++17
template < class H2 , class P2 >
constexpr void merge ( unordered_multimap < Key , T , H2 , P2 , Allocator >& source ); // (3) C++26
template < class H2 , class P2 >
void merge ( unordered_multimap < Key , T , H2 , P2 , Allocator >&& source ); // (4) C++17
template < class H2 , class P2 >
constexpr void merge ( unordered_multimap < Key , T , H2 , P2 , Allocator >&& source ); // (4) C++26
概要
引数 source 内の各要素を抽出し、*this のハッシュ関数とキー等価(equality)述語を使用して *this への挿入を試みる。
source の要素のキーと等価(equivalent)なキーの要素がある場合、その要素は source から抽出されない。
また、この操作で要素はコピーもムーブもされない。
要件
source.get_allocator() == (*this).get_allocator()
戻り値
なし
計算量
平均的なケースでは O(N)、最悪ケースでは O(N*size()+N)、ただし N は source.size() である。
例外
max_load_factor() の不変条件を維持するために再ハッシュが必要となる場合があり、その際のメモリ確保により例外が送出される可能性がある。また、ハッシュ関数やキー等価述語が例外を送出する場合もある。
備考
source の転送された要素へのポインタおよび参照は、それらと同じ要素を参照するが、*this のメンバとして参照する。また、転送された要素を参照する反復子と*thisを参照するすべての反復子は無効になるが、 source に残っている要素への反復子は有効なままになる。
例
#include <iostream>
#include <unordered_map>
int main ()
{
std::unordered_map < int , char > m1 = {
{ 10 , 'a' },
{ 20 , 'b' },
{ 30 , 'c' }
};
std::unordered_map < int , char > m2 = {
{ 10 , 'x' }
};
// m1 の要素を m2 に merge
m2 . merge ( m1 );
std::cout << "m1 :" << std::endl ;
for ( const auto & [ key , value ] : m1 )
std::cout << "[" << key << ", " << value << "]" << std::endl ;
std::cout << " \n " << "m2 :" << std::endl ;
for ( const auto & [ key , value ] : m2 )
std::cout << "[" << key << ", " << value << "]" << std::endl ;
}
出力例
m1 :
[10, a]
m2 :
[20, b]
[30, c]
[10, x]
バージョン
言語
処理系
参照