pair<iterator, iterator>
equal_range(const key_type& x); // (1) C++11
pair<const_iterator, const_iterator>
equal_range(const key_type& x) const; // (2) C++11
template <class K>
pair<iterator, iterator>
equal_range(const K& k); // (3) C++20
template <class K>
pair<const_iterator, const_iterator>
equal_range(const K& k) const; // (4) C++20
概要
コンテナ内の、指定されたキーと等しい全てのキー要素を含む範囲の境界を返す。unordered_set
コンテナではキーの重複は無いため、この範囲は最大一つの要素を含む。
もし指定されたキーがコンテナ内のどのキーともマッチしなかった場合、戻り値の範囲は長さ 0 になり、両方のイテレータは end
を指す。
- (1) : 非
const
なthis
に対してキーx
を検索し、合致する全ての要素を含む範囲を取得する - (2) :
const
なthis
に対してキーx
を検索し、合致する全ての要素を含む範囲を取得する - (3) : 非
const
なthis
に対してキーk
を透過的に検索し、合致する全ての要素を含む範囲を取得する - (4) :
const
なthis
に対してキーk
を透過的に検索し、合致する全ての要素を含む範囲を取得する
(3)、(4)の透過的な検索は、Pred::is_transparent
およびHash::is_transparent
が定義される場合に有効になる機能であり、例としてunordered_set<string> s;
に対してs.equal_range("key");
のようにstring
型のキーを持つ連想コンテナの検索インタフェースに文字列リテラルを渡した際、string
の一時オブジェクトが作られないようにできる。詳細はstd::hash
クラスのページを参照。
テンプレートパラメータ制約
- (3), (4) :
Pred::is_transparent
型およびHash::is_transparent
型が定義されていること
戻り値
合致する要素の範囲を表す pair
オブジェクトを返す。pair::first
は 範囲の下境界にあたり、pair::second
は 範囲の上境界にあたる。
そのような要素がない場合には、make_pair(end(), end())
を返す。
計算量
- 平均: 定数時間
- 最悪:
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
処理系
- Clang: 3.0 ✅, 3.1 ✅
- GCC: 4.4.7 ✅, 4.5.3 ✅, 4.6.3 ✅, 4.7.0 ✅
- ICC: ?
- Visual C++: ?
関連項目
名前 | 説明 |
---|---|
find |
指定したキーの位置を検索 |
count |
指定したキーの要素数を取得 |