C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++ STLのunordered_multimapにおけるreserve()関数の使い方

C++ STLのunordered_multimapが提供するreserve()関数は、コンテナに少なくともn個の要素を格納できるよう、バケット数を最も適切な値へ設定します。

引数nが「現在のバケット数 × max_load_factor」よりも大きい場合、コンテナは自動的にバケット数を増やし、強制的に再ハッシュ(rehash)を行います。

reserve()には戻り値がなく、要求する最小容量に対応する最小要素数を指定する引数nのみを受け取ります。

アルゴリズム

Begin
    マップコンテナmを宣言する。
    m.reserve(6) = バケットに必要な最小容量分のサイズを予約する。
    キーと値のペアを挿入する。
    結果を出力する。
End.

サンプルコード

#include<iostream>
#include <bits/stdc++.h>
using namespace std;

int main() {
    unordered_map<char, int> m;      // mをマップコンテナとして宣言

    m.reserve(6); // 最適なバケットサイズを事前に確保
    m.insert (pair<char, int>('b', 10)); // 値を挿入
    m.insert (pair<char, int>('a', 20));

    cout << "The size is: " << m.size();
    cout << "\nKey and values are: ";
    for (auto it = m.begin(); it != m.end(); it++) {
        cout << "{" << it->first << ", " << it->second << "} "; // マップコンテナの内容を出力
    }
    return 0;
}

実行結果

The size is: 2
Key and values are: {a, 20} {b, 10}

このようにreserve()を使うことで、あらかじめ十分なバケット数を確保しておき、要素挿入時の再ハッシュによるパフォーマンス低下を防ぐことができます。大量のデータを挿入する前に呼び出しておくと、処理効率の向上が期待できます。

  1. C++ STLのcosh()関数とは?双曲線余弦の求め方をサンプルコード付きで解説

    cosh()関数とは? C++のSTLに組み込まれているcosh()関数は、ラジアン単位で与えられた角度の双曲線余弦(ハイパボリック・コサイン)を計算して返す関数です。使用するには、<cmath>ヘッダーをインクルードする必要があります。 双曲線余弦は、数学的に次の式で定義されます。 cosh(x) = (e^x + e^(-x)) / 2 構文 cosh()関数の構文は以下の通りです。 cosh(var) 構文から分かるように、cosh()関数はfloat型、double型、long double型のいずれかの引数varを受け取ります。そして、その双曲線余弦を返します。なお、引

  2. 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