C++ STLのunordered_multimap::rehash()関数の使い方を徹底解説
C++ STLのunordered_multimap(およびunordered_map)が提供するrehash(N)関数は、コンテナ内のバケット数を引数n以上に設定するためのメンバ関数です。引数nが現在のバケット数よりも大きい場合、再ハッシュ(rehash)が強制的に実行され、新しいバケット数はnと等しいか、それ以上の値になります。
一方、引数nが現在のバケット数以下である場合は、バケット数に変化が生じず、再ハッシュも強制されません。つまり、この関数は「最低でもn個のバケットを確保する」という指示であり、戻り値は返しません。
構文
void rehash(size_type n);
パラメータ
- n: コンテナのハッシュテーブルに確保するバケット数の最小値を指定します。
動作のポイント
- nが現在のバケット数より大きい → バケット数が増やされ、全要素が再配置される(再ハッシュ発生)。
- nが現在のバケット数以下 → 何も起こらない可能性がある。
- 計算量は平均O(n)、最悪ケースでは要素数に比例する。
アルゴリズム
Begin
空のマップコンテナmを宣言する。
rehash()関数を呼び出し、コンテナのバケット数の下限を設定する。
バケット数と同等以上のキーと値のペアをコンテナに挿入する。
マップコンテナの要素を出力する。
End.サンプルコード
#include<iostream>
#include <bits/stdc++.h>
using namespace std;
int main() {
unordered_map<char, int> m;
// バケット数の最小値を1に設定
m.rehash(1);
m.insert(pair<char, int>('b', 10));
m.insert(pair<char, int>('a', 20));
cout << "サイズ: " << m.size();
cout << "\nキーと値: ";
for (auto it = m.begin(); it != m.end(); it++) {
cout << "{" << it->first << ", " << it->second << "} ";
}
return 0;
}実行結果
サイズ: 2
キーと値: {a, 20} {b, 10}コードの解説
まず空のunordered_mapコンテナmを宣言し、m.rehash(1)によってバケット数の最小値を1に設定しています。その後、2つのキーと値のペアを挿入すると、必要に応じてコンテナ側で自動的にバケットが拡張されます。最後に、範囲ベースのループでイテレータを使い、格納されたすべてのキーと値のペアを出力しています。
補足:関連する便利な関数
- bucket_count(): 現在のバケット数を取得できます。
- load_factor(): 要素数をバケット数で割った負荷率を確認できます。
- max_load_factor(): 再ハッシュが発生する負荷率の上限を設定・取得できます。
大量のデータを挿入することが事前に分かっている場合は、rehash()やreserve()を活用することで、挿入時の不要な再ハッシュを減らし、パフォーマンスを向上させることができます。
-
C++ STLのcosh()関数とは?双曲線余弦の求め方をサンプルコード付きで解説
cosh()関数とは? C++のSTLに組み込まれているcosh()関数は、ラジアン単位で与えられた角度の双曲線余弦(ハイパボリック・コサイン)を計算して返す関数です。使用するには、<cmath>ヘッダーをインクルードする必要があります。 双曲線余弦は、数学的に次の式で定義されます。 cosh(x) = (e^x + e^(-x)) / 2 構文 cosh()関数の構文は以下の通りです。 cosh(var) 構文から分かるように、cosh()関数はfloat型、double型、long double型のいずれかの引数varを受け取ります。そして、その双曲線余弦を返します。なお、引
-
C++ STLのsinh()関数の使い方を徹底解説
sinh()関数とはsinh()関数は、ラジアンで指定された値の双曲線正弦(ハイパボリックサイン)を返す関数です。C++のSTL(標準テンプレートライブラリ)に組み込まれており、<cmath>ヘッダをインクルードすることで利用できます。双曲線正弦は、以下の数式で定義されます。sinh(x) = (e^x − e^−x) / 2sinh()関数の構文sinh()関数の構文は以下のとおりです。sinh(var)構文からわかるように、sinh()関数はfloat型、double型、long double型のいずれかのパラメータvarを受け取ります。戻り値は、varの双曲線正弦です。sin