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

履歴 編集

function
<unordered_set>

# std::unordered_set::rehash(C++11)

    void rehash(size_type n);           // (1) C++11
    constexpr void rehash(size_type n); // (1) C++26

## 概要

コンテナのバケット数が最小でも引数 `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_set<int> us{ 1, 2, 3, 4, 5, 6, };

      std::cout << "size is " << us.size() << ", max_load_factor is " << us.max_load_factor() << std::endl;

      std::cout << "bucket_count is " << us.bucket_count() << std::endl;

      // 現在のバケット数より大きな値を指定する。
      us.rehash(100);
      std::cout << "bucket_count is " << us.bucket_count() << std::endl;

      // 現在の要素数 / max_load_factor() よりは大きく、現在のバケット数よりは小さい値を指定する。
      us.rehash(10);
      std::cout << "bucket_count is " << us.bucket_count() << std::endl;

      // 現在の要素数 / max_load_factor() より小さい値を指定する。
      us.rehash(1);
      std::cout << "bucket_count is " << us.bucket_count() << std::endl;
    }

### 出力例

    size is 6, max_load_factor is 1
    bucket_count is 11
    bucket_count is 101
    bucket_count is 11
    bucket_count is 7

## バージョン

### 言語

- C++11

### 処理系

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

## 関連項目

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

## 参照

- P3372R3 constexpr containers and adaptors