最終更新日時: 2026年03月21日 23時12分53秒 (JST)
Raclamusi が更新

履歴 編集

function
<flat_map>

# std::flat_multimap::swap(C++23)

    void swap(flat_multimap& y) noexcept;                          // (1) C++23
    constexpr void swap(flat_multimap& y)
      noexcept(is_nothrow_swappable_v<key_container_type> &&
               is_nothrow_swappable_v<mapped_container_type> &&
               is_nothrow_swappable_v<key_compare>);               // (1) C++26

## 概要

コンテナ内のコンテンツを、同じ型の要素を保持する他の `flat_multimap` オブジェクトである `y` 内のコンテンツと交換する。

このメンバ関数の呼び出しの後、呼び出し前にコンテナ内にあった要素は `y` へ、`y` 内にあった要素は `*this` へ移る。

## 計算量

定数時間

## 例

    #include <flat_map>
    #include <iostream>

    template <class Map>
    void print(const char* name, const Map& m)
    {
      std::cout << name << " : {";

      bool first = true;

      for (const auto& x : m) {
        if (first) {
          first = false;
        }
        else {
          std::cout << ", ";
        }
        std::cout << "[" << x.first << "," << x.second << "]";
      }
      std::cout << "}" << std::endl;
    }

    int main()
    {
      std::flat_multimap<int, char> fm1 = {
        {10, 'a'},
        {20, 'b'},
        {30, 'c'}
      };

      std::flat_multimap<int, char> fm2 = {
        {5, 'd'},
        {15, 'e'}
      };

      // fm1とfm2を入れ替える
      fm1.swap(fm2);

      ::print("fm1", fm1);
      ::print("fm2", fm2);
    }

### 出力

    fm1 : {[5,d], [15,e]}
    fm2 : {[10,a], [20,b], [30,c]}

## バージョン

### 言語

- C++23

### 処理系

- Clang: ??
- GCC: ??
- Visual C++: ??

## 参照

- P3372R3 constexpr containers and adaptors
- P3567R2 flat_meow Fixes
  - C++26で、`noexcept`指定が無条件から条件付きに変更された。内部コンテナと比較関数オブジェクトの`swap`が例外を送出しない場合にのみ`noexcept`となる