• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

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

    履歴 編集

    function
    <unordered_set>

    std::unordered_multiset::rehash

    void rehash(size_type n);
    

    概要

    コンテナのバケット数が最小でも引数 n で指定された値になるように調整(リハッシュ)する。

    事後条件

    bucket_count() > size() / max_load_factor() かつ、bucket_count() >= n

    戻り値

    なし

    例外

    ハッシュ関数、および、キー比較用関数以外から例外が投げられた場合、コンテナは変更されない。

    計算量

    平均的なケースでは size() に比例するが、最悪のケースでは size() の 2 乗に比例する。

    備考

    • リハッシュが行われた場合、
      • 全てのイテレータが無効になる。
      • 要素間の順番が変わる。
      • 要素の格納されているバケットが変更になる。
      • 要素へのポインタや参照は無効にならない
    • 現在のバケット数が n 以上の場合の動作は、標準では特に規定されていない。
    • 標準では、事後条件が bucket_count() > size() / max_load_factor() となっている(等号がない)が、load_factor()= size() / bucket_count())の条件は max_load_factor() >= load_factor() である(等号がある)ため、bucket_count() >= size() / max_load_factor() の(等号がある)方が適切であると思われる。

    #include <iostream>
    #include <unordered_set>
    
    int main()
    {
      std::unordered_multiset<int> ums{ 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, };
    
      std::cout << "size is " << ums.size() << ", max_load_factor is " << ums.max_load_factor() << std::endl;
    
      std::cout << "bucket_count is " << ums.bucket_count() << std::endl;
    
      // 現在のバケット数より大きな値を指定する。
      ums.rehash(100);
      std::cout << "bucket_count is " << ums.bucket_count() << std::endl;
    
      // 現在の要素数 / max_load_factor() よりは大きく、現在のバケット数よりは小さい値を指定する。
      ums.rehash(20);
      std::cout << "bucket_count is " << ums.bucket_count() << std::endl;
    
      // 現在の要素数 / max_load_factor() より小さい値を指定する。
      ums.rehash(1);
      std::cout << "bucket_count is " << ums.bucket_count() << std::endl;
    }
    

    出力例

    size is 12, max_load_factor is 1
    bucket_count is 23
    bucket_count is 101
    bucket_count is 23
    bucket_count is 13
    

    バージョン

    言語

    • C++11

    処理系

    関連項目

    名前 説明
    size 要素数の取得
    bucket_count バケット数の取得
    load_factor 現在の負荷率(バケットあたりの要素数の平均)を取得
    max_load_factor 負荷率の最大値を取得、設定
    reserve 最小要素数指定によるバケット数の調整