【C++】unordered_multimap::operator=() の使い方とサンプルコード解説
std::unordered_multimap::operator=() は、C++標準ライブラリに用意された代入演算子です。既存の要素をすべて置き換える形で新しい内容を unordered_multimap に代入し、必要に応じてコンテナのサイズも自動的に調整します。
概要
この演算子は「コピー代入」と呼ばれる動作を行い、引数として渡された別の unordered_multimap オブジェクトの全要素を現在のオブジェクトへ複製します。元々格納されていた要素は破棄され、新しい要素に置き換えられる点に注意してください。
以下は、<unordered_map> ヘッダーで宣言されている std::unordered_multimap::operator=() 関数の定義です。
C++11での構文
unordered_multimap& operator=(const unordered_multimap& umm);
パラメータ
umm - 同じ型の別の unordered_multimap オブジェクト。
戻り値
this ポインタ(*this)を返します。
戻り値として自身への参照が返されるため、a = b = c; のように連続した代入(連鎖代入)を記述することも可能です。
サンプルコード
次の例では、初期化済みの umm1 を空の umm2 に代入し、その内容を出力しています。
#include <iostream>
#include <unordered_map>
using namespace std;
int main(void) {
unordered_multimap umm1 = {
{'a', 1},
{'b', 2},
{'c', 3},
{'d', 4},
{'e', 5},
};
unordered_multimap umm2;
umm2 = umm1;
cout << "Unordered multimap contains following elements" << endl;
for (auto it = umm2.begin(); it != umm2.end(); ++it)
cout << it->first << " = " << it->second << endl;
return 0;
}
出力結果
Unordered multimap contains following elements e = 5 a = 1 b = 2 c = 3 d = 4
補足ポイント
unordered_multimapはハッシュテーブルベースのコンテナのため、要素の出力順序は実装環境によって異なる場合があります。- 同じキーの重複を許可するのが
multimapの特徴で、unordered_multimapでも同様に重複キーを保持できます。 - 代入元のオブジェクトは変更されず、あくまでコピーが行われるため、代入後も
umm1をそのまま利用できます。
-
C++ STLのunordered_multimapにおけるreserve()関数の使い方
C++ STLのunordered_multimapが提供するreserve()関数は、コンテナに少なくともn個の要素を格納できるよう、バケット数を最も適切な値へ設定します。引数nが「現在のバケット数 × max_load_factor」よりも大きい場合、コンテナは自動的にバケット数を増やし、強制的に再ハッシュ(rehash)を行います。reserve()には戻り値がなく、要求する最小容量に対応する最小要素数を指定する引数nのみを受け取ります。アルゴリズムBegin マップコンテナmを宣言する。 m.reserve(6) = バケットに必要な最小容量分のサイズを予約する。
-
C++ STLのunordered_multimap::rehash()関数の使い方を徹底解説
C++ STLのunordered_multimap(およびunordered_map)が提供するrehash(N)関数は、コンテナ内のバケット数を引数n以上に設定するためのメンバ関数です。引数nが現在のバケット数よりも大きい場合、再ハッシュ(rehash)が強制的に実行され、新しいバケット数はnと等しいか、それ以上の値になります。一方、引数nが現在のバケット数以下である場合は、バケット数に変化が生じず、再ハッシュも強制されません。つまり、この関数は「最低でもn個のバケットを確保する」という指示であり、戻り値は返しません。構文void rehash(size_type n);パラメータn: コ