最終更新日時:
が更新

履歴 編集

function
<unordered_set>

std::unordered_set::equal_range(C++11)

std::pair<iterator, iterator> equal_range(const key_type& k);
std::pair<const_iterator, const_iterator> equal_range(const key_type& k) const;

概要

指定したキーの範囲を取得する

戻り値

キー値が引数 k と等価な要素を全て含む範囲。そのような要素が無い場合には、make_pair(end(), end())

計算量

平均的なケースでは O(count(k))。最悪のケースでは O(size())。

備考

unordered_set の場合には、等価なキーはたかだか1つであるため、find ほど有用ではないと思われる。

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

template <class Iter>
void print_range(const std::string& label, Iter begin, Iter it1, Iter it2, std::ostream& os = std::cout)
{
  os << label << ": " << "[" << std::distance(begin, it1) << ", "  << std::distance(begin, it2) << ")" << std::endl;
}

int main()
{
  std::unordered_set<int> us{ 1, 3, 5, 7, 9, };

  std::copy(us.begin(), us.end(), std::ostream_iterator<int>(std::cout, ", "));
  std::cout << std::endl;

  auto p1 = us.equal_range(5);
  print_range("equal_range(5)", us.begin(), p1.first, p1.second);

  auto p2 = us.equal_range(8);
  print_range("equal_range(8)", us.begin(), p2.first, p2.second);
}

出力

9, 7, 5, 3, 1,
equal_range(5): [2, 3)
equal_range(8): [5, 5)

バージョン

言語

  • C++11

処理系

参照

ページ 概要
find 指定したキーの位置を検索
count 指定したキーの要素数を取得