C++
 Computer >> コンピューター >  >> プログラミング >> C++

【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 をそのまま利用できます。
  1. C++ STLのunordered_multimapにおけるreserve()関数の使い方

    C++ STLのunordered_multimapが提供するreserve()関数は、コンテナに少なくともn個の要素を格納できるよう、バケット数を最も適切な値へ設定します。引数nが「現在のバケット数 × max_load_factor」よりも大きい場合、コンテナは自動的にバケット数を増やし、強制的に再ハッシュ(rehash)を行います。reserve()には戻り値がなく、要求する最小容量に対応する最小要素数を指定する引数nのみを受け取ります。アルゴリズムBegin マップコンテナmを宣言する。 m.reserve(6) = バケットに必要な最小容量分のサイズを予約する。

  2. 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: コ