Skip to content

Commit 9bcd535

Browse files
committed
unordered_(multi)set::bucket : C++26の異種混合ルックアップに対応 #1189
1 parent 6216138 commit 9bcd535

File tree

2 files changed

+42
-7
lines changed

2 files changed

+42
-7
lines changed

reference/unordered_set/unordered_multiset/bucket.md

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,32 @@
66
* cpp11[meta cpp]
77

88
```cpp
9-
size_type bucket(const key_type& k) const;
9+
size_type bucket(const key_type& k) const; // (1) C++11
10+
11+
template <class K>
12+
size_type bucket(const K& k) const; // (2) C++26
1013
```
1114
1215
## 概要
1316
指定したキーと等価な要素が格納されている場合、そのバケットのインデックス(添え字)を取得する。
1417
18+
- (1) : `key_type`型のキーを受け取って、バケットのインデックスを取得する
19+
- (2) : `key_type`と比較可能なキーを受け取って、バケットのインデックスを取得する
20+
21+
22+
## テンプレートパラメータ制約
23+
- (2) : `key_compare::is_transparent` が妥当な式であること
1524
16-
## 要件
25+
26+
## 事前条件
1727
当該コンテナは [`bucket_count`](bucket_count.md)`() > 0` であること
1828
1929
2030
## 戻り値
2131
パラメータ `k` と等価なキーの要素が格納されているバケットのインデックス(添え字)
2232
33+
34+
## 事後条件
2335
戻り値は `[0,` [`bucket_count`](bucket_count.md)`())` の範囲である。
2436
2537
@@ -28,7 +40,10 @@ size_type bucket(const key_type& k) const;
2840
2941
3042
## 備考
31-
指定したキーと等価な要素が格納されていない場合、そのキーを挿入した際に [`rehash`](rehash.md) が発生しなければ格納されるバケットのインデックス(添え字)が返る。
43+
- 指定したキーと等価な要素が格納されていない場合、そのキーを挿入した際に [`rehash`](rehash.md) が発生しなければ格納されるバケットのインデックス(添え字)が返る。
44+
- (2) :
45+
- `is_transparent`は、標準ライブラリの[`std::less`](/reference/functional/less.md)、[`std::greater`](/reference/functional/greater.md)といった関数オブジェクトの、`void`に対する特殊化で定義される。それ以外のテンプレートパラメータで`is_transparent`が定義されないのは、互換性のためである。
46+
- これらのオーバーロードは、`map<string, int>`のようなコンテナに対し、検索操作で文字列リテラルを渡した際に、キー型の一時オブジェクトが生成されるコストを減らすためにある。
3247
3348
3449
## 例
@@ -94,3 +109,6 @@ key = H, bucket = 3, bucket_size = 0
94109
|----------------------------------------------|----------------------|
95110
| [`max_bucket_count`](max_bucket_count.md) | 最大バケット数の取得 |
96111

112+
## 参照
113+
- [P2363R5 Extending associative containers with the remaining heterogeneous overloads](http://open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2363r5.html)
114+
- C++26で`template <class K>`のバージョンが追加された

reference/unordered_set/unordered_set/bucket.md

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,32 @@
66
* cpp11[meta cpp]
77

88
```cpp
9-
size_type bucket(const key_type& k) const;
9+
size_type bucket(const key_type& k) const; // (1) C++11
10+
11+
template <class K>
12+
size_type bucket(const K& k) const; // (2) C++26
1013
```
1114
1215
## 概要
1316
指定したキーと等価な要素が格納されている場合、そのバケットのインデックス(添え字)を取得する。
1417
18+
- (1) : `key_type`型のキーを受け取って、バケットのインデックスを取得する
19+
- (2) : `key_type`と比較可能なキーを受け取って、バケットのインデックスを取得する
20+
21+
22+
## テンプレートパラメータ制約
23+
- (2) : `key_compare::is_transparent` が妥当な式であること
1524
16-
## 要件
25+
26+
## 事前条件
1727
当該コンテナは [`bucket_count`](bucket_count.md)`() > 0` であること
1828
1929
2030
## 戻り値
2131
パラメータ `k` と等価なキーの要素が格納されているバケットのインデックス(添え字)
2232
33+
34+
## 事後条件
2335
戻り値は `[0,` [`bucket_count`](bucket_count.md)`())` の範囲である。
2436
2537
@@ -28,7 +40,10 @@ size_type bucket(const key_type& k) const;
2840
2941
3042
## 備考
31-
指定したキーと等価な要素が格納されていない場合、そのキーを挿入した際に [`rehash`](rehash.md) が発生しなければ格納されるバケットのインデックス(添え字)が返る。
43+
- 指定したキーと等価な要素が格納されていない場合、そのキーを挿入した際に [`rehash`](rehash.md) が発生しなければ格納されるバケットのインデックス(添え字)が返る。
44+
- (2) :
45+
- `is_transparent`は、標準ライブラリの[`std::less`](/reference/functional/less.md)、[`std::greater`](/reference/functional/greater.md)といった関数オブジェクトの、`void`に対する特殊化で定義される。それ以外のテンプレートパラメータで`is_transparent`が定義されないのは、互換性のためである。
46+
- これらのオーバーロードは、`map<string, int>`のようなコンテナに対し、検索操作で文字列リテラルを渡した際に、キー型の一時オブジェクトが生成されるコストを減らすためにある。
3247
3348
3449
## 例
@@ -85,8 +100,10 @@ key = H, bucket = 2, bucket_size = 0
85100

86101
## 関連項目
87102

88-
89103
| 名前 | 説明 |
90104
|-------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------|
91105
| [`max_bucket_count`](max_bucket_count.md) | 最大バケット数の取得 |
92106

107+
## 参照
108+
- [P2363R5 Extending associative containers with the remaining heterogeneous overloads](http://open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2363r5.html)
109+
- C++26で`template <class K>`のバージョンが追加された

0 commit comments

Comments
 (0)