Skip to content

Commit a43bd16

Browse files
committed
flat_map : findを追加 #1078
1 parent 1702da3 commit a43bd16

File tree

3 files changed

+99
-2
lines changed

3 files changed

+99
-2
lines changed

reference/flat_map/flat_map.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ namespace std {
7777
| [`operator[]`](flat_map/op_at.md) | 指定したキーを持つ要素を取得する | C++23 |
7878
| [`at`](flat_map/at.md) | 指定したキーを持つ要素を取得する | C++23 |
7979
| [`count`](flat_map/count.md.nolink) | 指定したキーにマッチする要素の数を取得する | C++23 |
80-
| [`find`](flat_map/find.md.nolink) | 指定したキーで要素を探す | C++23 |
80+
| [`find`](flat_map/find.md) | 指定したキーで要素を探す | C++23 |
8181
| [`contains`](flat_map/contains.md.nolink) | 指定したキーの要素が含まれているかを判定する | C++23 |
8282
| [`equal_range`](flat_map/equal_range.md.nolink) | 指定したキーにマッチする要素範囲を取得する | C++23 |
8383
| [`lower_bound`](flat_map/lower_bound.md.nolink) | 与えられた値より小さくない最初の要素へのイテレータを取得する | C++23 |

reference/flat_map/flat_map/at.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,4 +95,4 @@ exception std::out_of_range
9595

9696
## 関連項目
9797
- [`operator[]`](op_at.md)
98-
- [`find()`](find.md.nolink)
98+
- [`find()`](find.md)

reference/flat_map/flat_map/find.md

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
# find
2+
* flat_map[meta header]
3+
* std[meta namespace]
4+
* flat_map[meta class]
5+
* function[meta id-type]
6+
* cpp23[meta cpp]
7+
8+
```cpp
9+
iterator find(const key_type& x); // (1) C++23
10+
11+
template <class K>
12+
iterator find(const K& x); // (2) C++23
13+
14+
const_iterator find(const key_type& x) const; // (3) C++23
15+
16+
template <class K>
17+
const_iterator find(const K& x) const; // (4) C++23
18+
```
19+
20+
## 概要
21+
`x`と等価なキーの要素を検索する。
22+
23+
- (1), (3) : クラスのテンプレートパラメータ`key_type`型のキーを受け取って検索する。
24+
- (2), (4) : `key_type`と比較可能な`K`型のキーを受け取って検索する。
25+
26+
27+
## テンプレートパラメータ制約
28+
- (2), (4) : `key_compare::is_transparent`が妥当な式であること
29+
30+
31+
## 戻り値
32+
- (1), (3) : `x`と等価なキーの要素が見つかった場合は、見つかった要素へのイテレータを返す。そうでない場合は、 [`end()`](end.md.nolink) を返す。
33+
- (2), (4) : `key_compare`型の関数オブジェクトを`c`、コンテナ内の各要素が持つキーを`k`として、キーが等価か判定する式`!c(k, x) && !c(x, k)`が`true`となる要素へのイテレータを返す。そのような要素がない場合は、[`end()`](end.md.nolink) を返す。
34+
35+
36+
## 計算量
37+
[`size`](size.md.nolink) について対数時間。
38+
39+
40+
## 備考
41+
- (2), (4) :
42+
- `is_transparent`は、標準ライブラリの[`std::less`](/reference/functional/less.md)、[`std::greater`](/reference/functional/greater.md)といった関数オブジェクトの、`void`に対する特殊化で定義される。それ以外のテンプレートパラメータで`is_transparent`が定義されないのは、互換性のためである。
43+
- これらのオーバーロードは、`map<string, int>`のようなコンテナに対し、検索操作で文字列リテラルを渡した際に、キー型の一時オブジェクトが生成されるコストを減らすためにある。
44+
45+
46+
## 例
47+
```cpp example
48+
#include <iostream>
49+
#include <flat_map>
50+
#include <string>
51+
52+
int main()
53+
{
54+
// (1)
55+
{
56+
std::flat_map<std::string, int> fm = {
57+
{"Alice", 3},
58+
{"Bob", 1},
59+
{"Carol", 4}
60+
};
61+
62+
decltype(fm)::iterator it = fm.find("Bob");
63+
if (it != fm.end()) { // 見つかった
64+
std::cout << it->second << std::endl;
65+
}
66+
}
67+
68+
// (2)
69+
{
70+
std::flat_map<std::string, int, std::less<>> fm = {
71+
{"Alice", 3},
72+
{"Bob", 1},
73+
{"Carol", 4}
74+
};
75+
76+
// std::lessのvoidに対する特殊化を使用することで、
77+
// 文字列リテラルをfind()関数の引数として渡した際に、
78+
// std::string型の一時オブジェクトが生成されない。
79+
decltype(fm)::iterator it = fm.find("Bob");
80+
if (it != fm.end()) { // 見つかった
81+
std::cout << it->second << std::endl;
82+
}
83+
}
84+
}
85+
```
86+
* find[color ff0000]
87+
* std::less[link /reference/functional/less.md]
88+
89+
### 出力
90+
```
91+
1
92+
1
93+
```
94+
95+
## 関連項目
96+
- [`contains()`](contains.md.nolink)
97+

0 commit comments

Comments
 (0)