iterator find(const key_type& x); // (1) C++11
const_iterator find(const key_type& x) const; // (2) C++11
template <class K> iterator find(const K& k); // (3) C++20
template <class K> const_iterator find(const K& k) const; // (4) C++20
概要
コンテナ内で指定されたキーに合致する要素を検索し、見つかった場合はそれへのイテレータを返し、見つからなかった場合は end
(コンテナの最後の要素の次)を指すイテレータを返す。
指定されたキーに合致する要素の範囲を取得するには equal_range
を用いる。
また、指定されたキーに合致する要素が存在するかを調べる場合は count
を用いる。
- (1) : 非
const
な*this
オブジェクトに対する検索 - (2) :
const
な*this
オブジェクトに対する検索 - (3) : 非
const
な*this
オブジェクトに対する透過的な検索 - (4) :
const
な*this
オブジェクトに対する透過的な検索
(3)、(4)の透過的な検索は、Pred::is_transparent
およびHash::is_transparent
が定義される場合に有効になる機能であり、例としてunordered_multimap<string, int> m;
に対してm.find("key");
のようにstring
型のキーを持つ連想コンテナの検索インタフェースに文字列リテラルを渡した際、string
の一時オブジェクトが作られないようにできる。詳細はstd::hash
クラスのページを参照。
パラメータ
x
: 検索するキー。key_type
はunordered_multimap
コンテナの中でKey
の別名として定義される。ここでKey
は 1 番目のテンプレートパラメータである。k
: 検索するキー。key_type
と透過的に比較可能な型K
型のキーである。
テンプレートパラメータ制約
- (3), (4) :
Pred::is_transparent
型およびHash::is_transparent
型が定義されていること
戻り値
指定した値が見つかった場合はその要素へのイテレータ、そうでない場合は end
へのイテレータ。
例外
投げない。
計算量
- 平均: 定数時間
- 最悪:
size
について線形時間
例
#include <iostream>
#include <unordered_map>
int main()
{
std::unordered_multimap<int, char> um;
um.insert(std::make_pair(1, 'a'));
std::cout << (um.find(1) != um.end()) << std::endl;
std::cout << (um.find(2) != um.end()) << std::endl;
return 0;
}
15
#include <iostream>
#include <unordered_map>
int main()
{
std::unordered_multimap<int, char> um;
um.insert(std::make_pair(1, 'a'));
std::cout << (um.find(1) != um.end()) << std::endl;
std::cout << (um.find(2) != um.end()) << std::endl;
return 0;
}
出力
1
0
バージョン
言語
- C++11
処理系
- Clang: ??
- GCC: ??
- ICC: ??
- Visual C++: 2012 ✅
関連項目
名前 | 説明 |
---|---|
count |
指定したキーにマッチする要素の数を返す |
equal_range |
指定したキーにマッチする要素の範囲を返す |