• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

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

    履歴 編集

    function
    <unordered_set>

    std::unordered_multiset::reserve

    void reserve(size_type n);
    

    概要

    コンテナが、リハッシュされずに少なくとも引数 n で指定された要素数格納できるようにバケット数を調整(リハッシュ)する。(ただし、備考を参照)

    事後条件

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

    戻り値

    なし

    例外

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

    計算量

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

    備考

    • C++11 : リハッシュされずに引数 n で指定された要素数が格納できるように意図されているはずが、 n - 1 しか格納することができない場合がある(少なくとも、事後条件を満たすだけでは確実に n 要素を格納できる保証はない)。
    • C++17 : リハッシュされずに引数 n で指定された要素数以上が格納できるようになる。
    • リハッシュされる条件については、insert()emplace()emplace_hint() も参照。
    • リハッシュが行われた場合、
      • 全てのイテレータが無効になる。
      • 要素間の順番が変わる。
      • 要素の格納されているバケットが変更になる。
      • 要素へのポインタや参照は無効にならない
    • 現在のバケット数が既に ceil(n / 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.reserve(100);
      std::cout << "bucket_count is " << ums.bucket_count() << std::endl;
    
      // 現在の要素数よりは大きく、現在のバケット数 / max_load_factor() よりは小さい値を指定する。
      ums.reserve(20);
      std::cout << "bucket_count is " << ums.bucket_count() << std::endl;
    
      // 現在の要素数より小さい値を指定する。
      ums.reserve(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 負荷率の最大値を取得、設定
    rehash 最小バケット数指定によるバケット数の調整
    insert 要素の追加
    emplace コンテナ内への要素の直接構築
    emplace_hint 挿入位置のヒントを使用したコンテナ内への要素の直接構築