最終更新日時(UTC): 2026年02月17日 14時22分33秒
Akira Takahashi が更新

履歴 編集

function
<map>

# std::map::operator=

    map& operator=(const map& x);           // (1) C++03
    constexpr map& operator=(const map& x); // (1) C++26

    map& operator=(map&& x);           // (2) C++11
    constexpr map& operator=(map&& x); // (2) C++26

    map& operator=(initializer_list<value_type> init);           // (3) C++11
    constexpr map& operator=(initializer_list<value_type> init); // (3) C++26

## 概要

- (1) : コピー代入
- (2) : ムーブ代入
- (3) : 初期化子リストの代入

## 効果

- (1) : 同じテンプレートパラメータを持つ`map`クラスのオブジェクトをコピー代入する。`*this`の全ての要素が解放され、`x`の全ての要素が`*this`にコピーされる。
- (2) : 同じテンプレートパラメータを持つ`map`クラスのオブジェクトをムーブ代入する。`*this`の全ての要素が解放され、`x`の全ての要素が`*this`にムーブされる。
- (3) : 同じテンプレートパラメータを持つ`initializer_list`クラスのオブジェクトをコピー代入する。`*this`の全ての要素が解放され、`init`の全ての要素が`*this`にコピーされる。

## 戻り値

`*this`

## 事後条件

- (1) : `*this == x`
- (2) : `*this`は元々の`x`と等値となる
- (3) : `*this == map{init}`

## 計算量

- (1) : 全要素のデストラクタ呼び出しとコピーを行うために、線形時間
- (2) : 全要素のデストラクタ呼び出しをするために、線形時間
- (3) : 全要素のデストラクタ呼び出しとコピーを行うために、線形時間

## 例

    #include <iostream>
    #include <map>

    int main()
    {
      std::pair<int,char> values[] = {
        std::make_pair(5,'e'),
        std::make_pair(2,'b'),
        std::make_pair(4,'d'),
        std::make_pair(1,'a'),
        std::make_pair(1,'a'),
        std::make_pair(3,'c')
      };
      std::map<int, char> m1(values, values + 6);
      std::map<int, char> m2;

      m2 = m1;
      m1 = std::map<int,char>();

      std::cout << "Size of m1: " << m1.size() << std::endl;
      std::cout << "Size of m2: " << m2.size() << std::endl;

      return 0;
    }

### 出力

    Size of m1: 0
    Size of m2: 5

### 処理系

- Clang: ??
- GCC: ??
- ICC: ??
- Visual C++: 2012 ✅

## 関連項目

名前 | 説明
--- | ---
`insert` | 要素を挿入する
`map::(constructor)` | コンストラクタ

## 参照

- N2679 Initializer Lists for Standard Containers(Revision 1)
  - (3)の経緯となる提案文書
- N4258 Cleaning-up noexcept in the Library, Rev 3
  - `noexcept` 追加の経緯となる提案文書
- P3372R3 constexpr containers and adaptors