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

履歴 編集

function
<unordered_set>

# std::unordered_multiset::clear(C++11)

    void clear() noexcept;           // (1) C++11
    constexpr void clear() noexcept; // (1) C++26

## 概要

コンテナ内のすべての要素を削除する。

## 要件

なし。

## 効果

コンテナ内のすべての要素を削除する。

## 事後条件

`empty() == true`

## 戻り値

なし。

## 例外

投げない。

## 計算量

本関数呼び出し前のコンテナの要素数（`size()`）に比例

### 計算量に関する備考

多くの実装（GCC libstdc++, LLVM libc++ など）は

1. 全ての要素を走査して各要素を破棄
2. 全てのバケットを走査して各バケットの状態をリセット

という手順を取るため、実際の実行時間はバケット数 `bucket_count()` について線形となる (`size() <= bucket_count() * max_load_factor()` = O(`bucket_count()`) であることに注意)。 規格の計算量の要件は要素数 `size()` に線形となっているが、規格がコンテナに対して定義する計算量は「コンテナに格納している要素に対する操作の数の計算量」であるためバケットの走査などを考慮していない。

## 備考

- `clear()` がバケット数(`bucket_count()`)を縮小することを規格は要求していない。 実装によっては `clear()` 後もバケット配列が維持され、動的メモリが残る場合がある。
- バケット数を初期状態まで縮小させたいときには `clear()` の代わりに以下のように操作する

      ums = std::unordered_multiset<int>();

## 例

    #include <iostream>
    #include <unordered_set>

    int main()
    {
      std::unordered_multiset<int> ums{ 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, };

      std::cout << std::boolalpha;
      std::cout << ums.empty() << std::endl;
      ums.clear();
      std::cout << ums.empty() << std::endl;
    }

### 出力

    false
    true

## バージョン

### 言語

- C++11

### 処理系

- Clang: 3.1 ✅
- GCC: 4.7.0 ✅
- ICC: ?
- Visual C++: ?

## 関連項目

名前 | 説明
--- | ---
`empty` | コンテナが空かどうかを判定
`emplace` | コンテナ内への要素の直接構築
`emplace_hint` | 挿入位置のヒントを使用したコンテナ内への要素の直接構築
`insert` | 要素の追加
`erase` | 要素の削除
`swap` | 内容の交換

## 参照

- P3372R3 constexpr containers and adaptors