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

履歴 編集

function
<unordered_set>

std::unordered_multiset::begin(size_type)(C++11)

local_iterator begin(size_type n);
const_local_iterator begin(size_type n) const;

概要

インデックス(添え字)で指定したバケット内の先頭の要素を指すイテレータを取得する。

unordered_multiset は非順序連想コンテナであるため「先頭」に特に意味はないが、begin(size_type) で得られたイテレータを end(size_type) まで operator++() でイテレートすることで当該バケットの要素を漏れなくダブりなく走査することができる。

要件

パラメータ n[0, bucket_count()) の範囲でなければならない。

戻り値

インデックス(添え字) n で指定したバケット内の先頭の要素を指すイテレータ

計算量

定数

備考

const 版ではない begin が返す local_iterator も読み取り専用イテレータである。

(が、local_iteratorconst_local_iterator が同じ型とは限らないと思われる)

#include <iostream>
#include <string>
#include <unordered_set>
#include <algorithm>
#include <iterator>

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)::size_type b = 0; b < c; ++b) {
    decltype(ums)::size_type s = ums.bucket_size(b);
    std::cout << "bucket = " << b << ", bucket_size = " << s << ", keys = { ";
    std::copy(ums.begin(b), ums.end(b), std::ostream_iterator<std::string>(std::cout, ", "));
    std::cout << "}" << std::endl;
  }
}

出力

bucket_count() = 11
bucket = 0, bucket_size = 0, keys = { }
bucket = 1, bucket_size = 0, keys = { }
bucket = 2, bucket_size = 0, keys = { }
bucket = 3, bucket_size = 0, keys = { }
bucket = 4, bucket_size = 0, keys = { }
bucket = 5, bucket_size = 6, keys = { A, A, C, C, D, D, }
bucket = 6, bucket_size = 2, keys = { E, E, }
bucket = 7, bucket_size = 2, keys = { B, B, }
bucket = 8, bucket_size = 0, keys = { }
bucket = 9, bucket_size = 0, keys = { }
bucket = 10, bucket_size = 0, keys = { }

バージョン

言語

  • C++11

処理系

関連項目

名前 説明
begin 先頭要素を指すイテレータの取得
end 最終要素の次を指すイテレータの取得
cbegin 先頭要素を指す読み取り専用イテレータの取得
cend 最終要素の次を指す読み取り専用イテレータの取得
end(size_type) インデックス(添え字)で指定したバケット内の最終要素の次を指すイテレータを取得
cbegin(size_type) インデックス(添え字)で指定したバケット内の先頭要素を指す読み取り専用イテレータを取得
cend(size_type) インデックス(添え字)で指定したバケット内の最終要素の次を指す読み取り専用イテレータを取得