最終更新日時:
が更新

履歴 編集

function
<unordered_set>

std::unordered_multiset::bucket(C++11)

size_type bucket(const key_type& k) const;

概要

指定したキーと等価な要素が格納されている場合、そのバケットのインデックス(添え字)を取得する。

要件

当該コンテナは bucket_count() > 0 であること

戻り値

パラメータ k と等価なキーの要素が格納されているバケットのインデックス(添え字)

戻り値は [0, bucket_count()) の範囲である。

計算量

定数。

備考

指定したキーと等価な要素が格納されていない場合、そのキーを挿入した際に rehash が発生しなければ格納されるバケットのインデックス(添え字)が返る。

#include <iostream>
#include <string>
#include <unordered_set>

int main()
{
  std::unordered_multiset<std::string> ums{ "A", "B", "C", "D", "E", "A", "B", "C", "D", "E", };

  decltype(ums)::size_type c = ums.bucket_count();
  std::cout << "bucket_count() = " << c << std::endl;

  // 全てのキーに対するバケットのインデックスとそのバケットの要素数を取得
  for (decltype(ums)::key_type k : ums) {
    decltype(ums)::size_type b = ums.bucket(k);
    decltype(ums)::size_type s = ums.bucket_size(b);
    std::cout << "key = " << k << ", bucket = " << b << ", bucket_size = " << s << std::endl;
  }

  // 存在しないキーに対するバケットのインデックスとそのバケットの要素数を取得
  decltype(ums)::key_type k = "H";
  decltype(ums)::size_type b = ums.bucket(k);
  decltype(ums)::size_type s = ums.bucket_size(b);
  std::cout << "key = " << k << ", bucket = " << b << ", bucket_size = " << s << std::endl;
}

出力

bucket_count() = 11
key = E, bucket = 6, bucket_size = 2
key = E, bucket = 6, bucket_size = 2
key = A, bucket = 5, bucket_size = 6
key = A, bucket = 5, bucket_size = 6
key = C, bucket = 5, bucket_size = 6
key = C, bucket = 5, bucket_size = 6
key = D, bucket = 5, bucket_size = 6
key = D, bucket = 5, bucket_size = 6
key = B, bucket = 7, bucket_size = 2
key = B, bucket = 7, bucket_size = 2
key = H, bucket = 3, bucket_size = 0

バージョン

言語

  • C++11

処理系

参照

max_bucket_count 最大バケット数の取得