GeezerVison is showing cpprefjp.github.io — std::unordered_set::equal_range - cpprefjp C++日本語リファレンス
最終更新日時:
2026年09月11日 13時06分31秒 (JST)
Akira Takahashi
が更新
履歴
編集
function
<unordered_set>
std:: unordered_set:: equal_range (C++11)
pair < iterator , iterator >
equal_range ( const key_type & x ); // (1) C++11
constexpr pair < iterator , iterator >
equal_range ( const key_type & x ); // (1) C++26
pair < const_iterator , const_iterator >
equal_range ( const key_type & x ) const ; // (2) C++11
constexpr pair < const_iterator , const_iterator >
equal_range ( const key_type & x ) const ; // (2) C++26
template < class K >
pair < iterator , iterator >
equal_range ( const K & k ); // (3) C++20
template < class K >
constexpr pair < iterator , iterator >
equal_range ( const K & k ); // (3) C++26
template < class K >
pair < const_iterator , const_iterator >
equal_range ( const K & k ) const ; // (4) C++20
template < class K >
constexpr pair < const_iterator , const_iterator >
equal_range ( const K & k ) const ; // (4) C++26
概要
コンテナ内の、指定されたキーと等しい全てのキー要素を含む範囲の境界を返す。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 について線形時間
備考
例
#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)
バージョン
言語
処理系
関連項目
参照