最終更新日時(UTC):
が更新

履歴 編集

function
<unordered_map>

std::unordered_map::clear(C++11)

void clear() noexcept;

概要

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

要件

なし。

効果

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

事後条件

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() の代わりに以下のように操作する

#include <iostream>
#include <unordered_map>

int main()
{
  std::unordered_map<std::string, int> um{ {"1st", 1}, {"2nd", 2}, {"3rd", 3}, {"4th", 4}, {"5th", 5}, };

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

出力

false
true

バージョン

言語

  • C++11

処理系

関連項目

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