68
68
69
69
</ head >
70
70
< body >
71
- < header data-kunai-mdinfo ="{"meta": {"header": ["algorithm"], "namespace": ["std"], "id-type": ["function template"]}, "sources": [{"id": "2edecb99281974d86dee9984592d7bac47bd2fe0", "source": "#include <iostream>\n#include <vector>\n#include <algorithm>\n\nint main()\n{\n std::vector<int> v = {3, 1, 4, 2, 5};\n\n std::sort(v.begin(), v.end());\n\n // 3\u4ee5\u4e0a\u306e\u8981\u7d20\u3068\u30013\u3088\u308a\u5927\u304d\u3044\u8981\u7d20\u3092\u4e8c\u5206\u63a2\u7d22\u3067\u691c\u7d22\n auto result = std::equal_range(v.begin(), v.end(), 3);\n\n std::cout << *result.first << std::endl;\n std::cout << *result.second << std::endl;\n}\n"}], "page_id": ["reference", "algorithm", "equal_range"]} ">
71
+ < header data-kunai-mdinfo ="{"meta": {"header": ["algorithm"], "namespace": ["std"], "id-type": ["function template"]}, "sources": [{"id": "2edecb99281974d86dee9984592d7bac47bd2fe0", "source": "#include <iostream>\n#include <vector>\n#include <algorithm>\n\nint main()\n{\n std::vector<int> v = {3, 1, 4, 2, 5};\n\n std::sort(v.begin(), v.end());\n\n // 3\u4ee5\u4e0a\u306e\u8981\u7d20\u3068\u30013\u3088\u308a\u5927\u304d\u3044\u8981\u7d20\u3092\u4e8c\u5206\u63a2\u7d22\u3067\u691c\u7d22\n auto result = std::equal_range(v.begin(), v.end(), 3);\n\n std::cout << *result.first << std::endl;\n std::cout << *result.second << std::endl;\n}\n"}, {"id": "d6628cb857901007da30b4d960ecedd7826189f8", "source": "#include <algorithm>\n#include <iostream>\n#include <vector>\n\nstruct Point {\n int x;\n int y;\n\n bool operator==(const Point& other) const = default;\n auto operator<=>(const Point& other) const = default;\n};\n\nint main() {\n std::vector<Point> v = {\n {1, 2},\n {3, 4},\n {3, 4},\n {5, 6},\n };\n\n // \u5024{3, 4}\u304c\u898b\u3064\u304b\u308b\u7bc4\u56f2\u3092\u53d6\u5f97\n auto result = std::equal_range(v.begin(), v.end(), {3, 4});\n\n while (result.first != result.second) {\n std::cout << result.first->x << \",\" << result.first->y << std::endl;\n ++result.first;\n }\n}\n"}], "page_id": ["reference", "algorithm", "equal_range"]} ">
72
72
< nav class ="navbar navbar-default " role ="navigation ">
73
73
< div class ="container-fluid ">
74
74
< div class ="navbar-header ">
188
188
189
189
< p class ="text-right "> < small >
190
190
最終更新日時(UTC):
191
- < span itemprop ="datePublished " content ="2021-12-16T12:39:17 ">
192
- 2021年12月16日 12時39分17秒
191
+ < span itemprop ="datePublished " content ="2025-05-27T05:53:08 ">
192
+ 2025年05月27日 05時53分08秒
193
193
</ span >
194
194
< br />
195
195
< span itemprop ="author " itemscope itemtype ="http://schema.org/Person ">
196
- < span itemprop ="name "> rsk0315 </ span >
196
+ < span itemprop ="name "> Akira Takahashi </ span >
197
197
</ span >
198
198
が更新
199
199
</ small > </ p >
214
214
215
215
< div class ="identifier-type "> function template</ div > < div class ="header "> <algorithm></ div > < h1 itemprop ="name "> < span class ="namespace " title ="namespace std "> std::</ span > < span class ="token "> equal_range</ span > </ h1 >
216
216
< div itemprop ="articleBody "> < p > < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="k "> namespace</ span > < span class ="n "> std</ span > < span class ="p "> {</ span >
217
- < span class ="k "> template</ span > < span class ="o "> <</ span > < span class ="k "> class</ span > < span class ="nc "> ForwardIterator</ span > < span class ="p "> ,</ span > < span class ="k "> class</ span > < span class ="nc "> T</ span > < span class ="o "> ></ span >
217
+ < span class ="k "> template</ span > < span class ="o "> <</ span > < span class ="k "> class</ span > < span class ="nc "> ForwardIterator</ span > < span class ="p "> ,</ span >
218
+ < span class ="k "> class</ span > < span class ="nc "> T</ span > < span class ="o "> ></ span >
218
219
< span class ="n "> < a href ="../utility/pair.html "> pair</ a > </ span > < span class ="o "> <</ span > < span class ="n "> ForwardIterator</ span > < span class ="p "> ,</ span > < span class ="n "> ForwardIterator</ span > < span class ="o "> ></ span >
219
220
< span class ="n "> equal_range</ span > < span class ="p "> (</ span > < span class ="n "> ForwardIterator</ span > < span class ="n "> first</ span > < span class ="p "> ,</ span >
220
221
< span class ="n "> ForwardIterator</ span > < span class ="n "> last</ span > < span class ="p "> ,</ span >
221
222
< span class ="k "> const</ span > < span class ="n "> T</ span > < span class ="o "> &</ span > < span class ="n "> value</ span > < span class ="p "> );</ span > < span class ="c1 "> // (1) C++03</ span >
222
-
223
- < span class =" k " > template </ span > < span class =" o " > < </ span > < span class =" k " > class </ span > < span class =" nc " > ForwardIterator </ span > < span class =" p " > , </ span > < span class ="k "> class</ span > < span class ="nc "> T</ span > < span class ="o "> ></ span >
223
+ < span class =" k " > template </ span > < span class =" o " > < </ span > < span class =" k " > class </ span > < span class =" nc " > ForwardIterator </ span > < span class =" p " > , </ span >
224
+ < span class ="k "> class</ span > < span class ="nc "> T</ span > < span class ="o "> ></ span >
224
225
< span class ="k "> constexpr</ span > < span class ="n "> < a href ="../utility/pair.html "> pair</ a > </ span > < span class ="o "> <</ span > < span class ="n "> ForwardIterator</ span > < span class ="p "> ,</ span > < span class ="n "> ForwardIterator</ span > < span class ="o "> ></ span >
225
226
< span class ="n "> equal_range</ span > < span class ="p "> (</ span > < span class ="n "> ForwardIterator</ span > < span class ="n "> first</ span > < span class ="p "> ,</ span >
226
227
< span class ="n "> ForwardIterator</ span > < span class ="n "> last</ span > < span class ="p "> ,</ span >
227
228
< span class ="k "> const</ span > < span class ="n "> T</ span > < span class ="o "> &</ span > < span class ="n "> value</ span > < span class ="p "> );</ span > < span class ="c1 "> // (1) C++20</ span >
229
+ < span class ="k "> template</ span > < span class ="o "> <</ span > < span class ="k "> class</ span > < span class ="nc "> ForwardIterator</ span > < span class ="p "> ,</ span >
230
+ < span class ="k "> class</ span > < span class ="nc "> T</ span > < span class ="o "> =</ span > < span class ="k "> typename</ span > < span class ="n "> < a href ="../iterator/iterator_traits.html "> iterator_traits</ a > </ span > < span class ="o "> <</ span > < span class ="n "> ForwardIterator</ span > < span class ="o "> >::</ span > < span class ="n "> value_type</ span > < span class ="o "> ></ span >
231
+ < span class ="k "> constexpr</ span > < span class ="n "> < a href ="../utility/pair.html "> pair</ a > </ span > < span class ="o "> <</ span > < span class ="n "> ForwardIterator</ span > < span class ="p "> ,</ span > < span class ="n "> ForwardIterator</ span > < span class ="o "> ></ span >
232
+ < span class ="n "> equal_range</ span > < span class ="p "> (</ span > < span class ="n "> ForwardIterator</ span > < span class ="n "> first</ span > < span class ="p "> ,</ span >
233
+ < span class ="n "> ForwardIterator</ span > < span class ="n "> last</ span > < span class ="p "> ,</ span >
234
+ < span class ="k "> const</ span > < span class ="n "> T</ span > < span class ="o "> &</ span > < span class ="n "> value</ span > < span class ="p "> );</ span > < span class ="c1 "> // (1) C++26</ span >
228
235
229
- < span class ="k "> template</ span > < span class ="o "> <</ span > < span class ="k "> class</ span > < span class ="nc "> ForwardIterator</ span > < span class ="p "> ,</ span > < span class ="k "> class</ span > < span class ="nc "> T</ span > < span class ="p "> ,</ span > < span class ="k "> class</ span > < span class ="nc "> Compare</ span > < span class ="o "> ></ span >
236
+ < span class ="k "> template</ span > < span class ="o "> <</ span > < span class ="k "> class</ span > < span class ="nc "> ForwardIterator</ span > < span class ="p "> ,</ span >
237
+ < span class ="k "> class</ span > < span class ="nc "> T</ span > < span class ="p "> ,</ span >
238
+ < span class ="k "> class</ span > < span class ="nc "> Compare</ span > < span class ="o "> ></ span >
230
239
< span class ="n "> < a href ="../utility/pair.html "> pair</ a > </ span > < span class ="o "> <</ span > < span class ="n "> ForwardIterator</ span > < span class ="p "> ,</ span > < span class ="n "> ForwardIterator</ span > < span class ="o "> ></ span >
231
240
< span class ="n "> equal_range</ span > < span class ="p "> (</ span > < span class ="n "> ForwardIterator</ span > < span class ="n "> first</ span > < span class ="p "> ,</ span >
232
241
< span class ="n "> ForwardIterator</ span > < span class ="n "> last</ span > < span class ="p "> ,</ span >
233
242
< span class ="k "> const</ span > < span class ="n "> T</ span > < span class ="o "> &</ span > < span class ="n "> value</ span > < span class ="p "> ,</ span >
234
243
< span class ="n "> Compare</ span > < span class ="n "> comp</ span > < span class ="p "> );</ span > < span class ="c1 "> // (2) C++03</ span >
235
-
236
- < span class ="k "> template</ span > < span class ="o "> <</ span > < span class ="k "> class</ span > < span class ="nc "> ForwardIterator</ span > < span class ="p "> ,</ span > < span class ="k "> class</ span > < span class ="nc "> T</ span > < span class ="p "> ,</ span > < span class ="k "> class</ span > < span class ="nc "> Compare</ span > < span class ="o "> ></ span >
244
+ < span class ="k "> template</ span > < span class ="o "> <</ span > < span class ="k "> class</ span > < span class ="nc "> ForwardIterator</ span > < span class ="p "> ,</ span >
245
+ < span class ="k "> class</ span > < span class ="nc "> T</ span > < span class ="p "> ,</ span >
246
+ < span class ="k "> class</ span > < span class ="nc "> Compare</ span > < span class ="o "> ></ span >
237
247
< span class ="k "> constexpr</ span > < span class ="n "> < a href ="../utility/pair.html "> pair</ a > </ span > < span class ="o "> <</ span > < span class ="n "> ForwardIterator</ span > < span class ="p "> ,</ span > < span class ="n "> ForwardIterator</ span > < span class ="o "> ></ span >
238
248
< span class ="n "> equal_range</ span > < span class ="p "> (</ span > < span class ="n "> ForwardIterator</ span > < span class ="n "> first</ span > < span class ="p "> ,</ span >
239
249
< span class ="n "> ForwardIterator</ span > < span class ="n "> last</ span > < span class ="p "> ,</ span >
240
250
< span class ="k "> const</ span > < span class ="n "> T</ span > < span class ="o "> &</ span > < span class ="n "> value</ span > < span class ="p "> ,</ span >
241
251
< span class ="n "> Compare</ span > < span class ="n "> comp</ span > < span class ="p "> );</ span > < span class ="c1 "> // (2) C++20</ span >
252
+ < span class ="k "> template</ span > < span class ="o "> <</ span > < span class ="k "> class</ span > < span class ="nc "> ForwardIterator</ span > < span class ="p "> ,</ span >
253
+ < span class ="k "> class</ span > < span class ="nc "> T</ span > < span class ="o "> =</ span > < span class ="k "> typename</ span > < span class ="n "> < a href ="../iterator/iterator_traits.html "> iterator_traits</ a > </ span > < span class ="o "> <</ span > < span class ="n "> ForwardIterator</ span > < span class ="o "> >::</ span > < span class ="n "> value_type</ span > < span class ="p "> ,</ span >
254
+ < span class ="k "> class</ span > < span class ="nc "> Compare</ span > < span class ="o "> ></ span >
255
+ < span class ="k "> constexpr</ span > < span class ="n "> < a href ="../utility/pair.html "> pair</ a > </ span > < span class ="o "> <</ span > < span class ="n "> ForwardIterator</ span > < span class ="p "> ,</ span > < span class ="n "> ForwardIterator</ span > < span class ="o "> ></ span >
256
+ < span class ="n "> equal_range</ span > < span class ="p "> (</ span > < span class ="n "> ForwardIterator</ span > < span class ="n "> first</ span > < span class ="p "> ,</ span >
257
+ < span class ="n "> ForwardIterator</ span > < span class ="n "> last</ span > < span class ="p "> ,</ span >
258
+ < span class ="k "> const</ span > < span class ="n "> T</ span > < span class ="o "> &</ span > < span class ="n "> value</ span > < span class ="p "> ,</ span >
259
+ < span class ="n "> Compare</ span > < span class ="n "> comp</ span > < span class ="p "> );</ span > < span class ="c1 "> // (2) C++26</ span >
242
260
< span class ="p "> }</ span >
243
261
</ code > </ pre > </ div >
244
262
</ p >
@@ -254,7 +272,20 @@ <h2><a class="cpprefjp-defined-word" data-desc="関数呼び出し式の評価
254
272
</ ul >
255
273
< h2 > < a class ="cpprefjp-defined-word " data-desc ="関数等の意味論を構成する要素の1つ。Complexity。関数が使うアルゴリズムの空間計算量・時間計算量 "> 計算量</ a > </ h2 >
256
274
< p > 最大で 2 * log2(< code > last - first</ code > ) + O(1) 回の比較を行う</ p >
275
+ < h2 > 備考</ h2 >
276
+ < ul >
277
+ < li > (1), (2) :< ul >
278
+ < li > C++26 : 引数として波カッコ初期化< code > {}</ code > を受け付ける
279
+ < br />
280
+ < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="n "> < a href ="../vector/vector.html "> std::vector</ a > </ span > < span class ="o "> <</ span > < span class ="n "> T</ span > < span class ="o "> ></ span > < span class ="n "> v</ span > < span class ="p "> ;</ span >
281
+ < span class ="k "> auto</ span > < span class ="n "> result</ span > < span class ="o "> =</ span > < span class ="n "> std</ span > < span class ="o "> ::</ span > < span class ="n "> equal_range</ span > < span class ="p "> (</ span > < span class ="n "> < a href ="../vector/vector/begin.html "> v.begin()</ a > </ span > < span class ="p "> ,</ span > < span class ="n "> < a href ="../vector/vector/end.html "> v.end()</ a > </ span > < span class ="p "> ,</ span > < span class ="p "> {</ span > < span class ="n "> a</ span > < span class ="p "> ,</ span > < span class ="n "> b</ span > < span class ="p "> });</ span >
282
+ </ code > </ pre > </ div >
283
+ </ li >
284
+ </ ul >
285
+ </ li >
286
+ </ ul >
257
287
< h2 > 例</ h2 >
288
+ < h3 > 基本的な使い方</ h3 >
258
289
< p > < div class ="yata " id ="2edecb99281974d86dee9984592d7bac47bd2fe0 "> < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../iostream.html "> <iostream></ a > </ span > < span class ="cp "> </ span >
259
290
< span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../vector.html "> <vector></ a > </ span > < span class ="cp "> </ span >
260
291
< span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../algorithm.html "> <algorithm></ a > </ span > < span class ="cp "> </ span >
@@ -273,14 +304,53 @@ <h2>例</h2>
273
304
< span class ="p "> }</ span >
274
305
</ code > </ pre > </ div >
275
306
</ div > </ p >
276
- < h3 > 出力</ h3 >
307
+ < h4 > 出力</ h4 >
277
308
< p > < pre > < code > 3
278
309
4
279
310
</ code > </ pre > </ p >
311
+ < h3 > 波カッコ初期化を入力として使用する (C++26)</ h3 >
312
+ < p > < div class ="yata " id ="d6628cb857901007da30b4d960ecedd7826189f8 "> < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../algorithm.html "> <algorithm></ a > </ span > < span class ="cp "> </ span >
313
+ < span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../iostream.html "> <iostream></ a > </ span > < span class ="cp "> </ span >
314
+ < span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../vector.html "> <vector></ a > </ span > < span class ="cp "> </ span >
315
+
316
+ < span class ="k "> struct</ span > < span class ="n "> Point</ span > < span class ="p "> {</ span >
317
+ < span class ="kt "> int</ span > < span class ="n "> x</ span > < span class ="p "> ;</ span >
318
+ < span class ="kt "> int</ span > < span class ="n "> y</ span > < span class ="p "> ;</ span >
319
+
320
+ < span class ="kt "> bool</ span > < span class ="k "> operator</ span > < span class ="o "> ==</ span > < span class ="p "> (</ span > < span class ="k "> const</ span > < span class ="n "> Point</ span > < span class ="o "> &</ span > < span class ="n "> other</ span > < span class ="p "> )</ span > < span class ="k "> const</ span > < span class ="o "> =</ span > < span class ="k "> default</ span > < span class ="p "> ;</ span >
321
+ < span class ="k "> auto</ span > < span class ="k "> operator</ span > < span class ="o "> <=></ span > < span class ="p "> (</ span > < span class ="k "> const</ span > < span class ="n "> Point</ span > < span class ="o "> &</ span > < span class ="n "> other</ span > < span class ="p "> )</ span > < span class ="k "> const</ span > < span class ="o "> =</ span > < span class ="k "> default</ span > < span class ="p "> ;</ span >
322
+ < span class ="p "> };</ span >
323
+
324
+ < span class ="kt "> int</ span > < span class ="nf "> main</ span > < span class ="p "> ()</ span > < span class ="p "> {</ span >
325
+ < span class ="n "> < a href ="../vector/vector.html "> std::vector</ a > </ span > < span class ="o "> <</ span > < span class ="n "> Point</ span > < span class ="o "> ></ span > < span class ="n "> v</ span > < span class ="o "> =</ span > < span class ="p "> {</ span >
326
+ < span class ="p "> {</ span > < span class ="mi "> 1</ span > < span class ="p "> ,</ span > < span class ="mi "> 2</ span > < span class ="p "> },</ span >
327
+ < span class ="p "> {</ span > < span class ="mi "> 3</ span > < span class ="p "> ,</ span > < span class ="mi "> 4</ span > < span class ="p "> },</ span >
328
+ < span class ="p "> {</ span > < span class ="mi "> 3</ span > < span class ="p "> ,</ span > < span class ="mi "> 4</ span > < span class ="p "> },</ span >
329
+ < span class ="p "> {</ span > < span class ="mi "> 5</ span > < span class ="p "> ,</ span > < span class ="mi "> 6</ span > < span class ="p "> },</ span >
330
+ < span class ="p "> };</ span >
331
+
332
+ < span class ="c1 "> // 値{3, 4}が見つかる範囲を取得</ span >
333
+ < span class ="k "> auto</ span > < span class ="n "> result</ span > < span class ="o "> =</ span > < span class ="n "> < span style ="color:#ff0000 "> std::equal_range</ span > </ span > < span class ="p "> (</ span > < span class ="n "> < a href ="../vector/vector/begin.html "> v.begin()</ a > </ span > < span class ="p "> ,</ span > < span class ="n "> < a href ="../vector/vector/end.html "> v.end()</ a > </ span > < span class ="p "> ,</ span > < span class ="p "> {</ span > < span class ="mi "> 3</ span > < span class ="p "> ,</ span > < span class ="mi "> 4</ span > < span class ="p "> });</ span >
334
+
335
+ < span class ="k "> while</ span > < span class ="p "> (</ span > < span class ="n "> result</ span > < span class ="p "> .</ span > < span class ="n "> first</ span > < span class ="o "> !=</ span > < span class ="n "> result</ span > < span class ="p "> .</ span > < span class ="n "> second</ span > < span class ="p "> )</ span > < span class ="p "> {</ span >
336
+ < span class ="n "> < a href ="../iostream/cout.html "> std::cout</ a > </ span > < span class ="o "> <<</ span > < span class ="n "> result</ span > < span class ="p "> .</ span > < span class ="n "> first</ span > < span class ="o "> -></ span > < span class ="n "> x</ span > < span class ="o "> <<</ span > < span class ="s "> ","</ span > < span class ="o "> <<</ span > < span class ="n "> result</ span > < span class ="p "> .</ span > < span class ="n "> first</ span > < span class ="o "> -></ span > < span class ="n "> y</ span > < span class ="o "> <<</ span > < span class ="n "> < a href ="../ostream/endl.html "> std::endl</ a > </ span > < span class ="p "> ;</ span >
337
+ < span class ="o "> ++</ span > < span class ="n "> result</ span > < span class ="p "> .</ span > < span class ="n "> first</ span > < span class ="p "> ;</ span >
338
+ < span class ="p "> }</ span >
339
+ < span class ="p "> }</ span >
340
+ </ code > </ pre > </ div >
341
+ </ div > </ p >
342
+ < h4 > 出力</ h4 >
343
+ < p > < pre > < code > 3,4
344
+ 3,4
345
+ </ code > </ pre > </ p >
280
346
< h2 > 参照</ h2 >
281
347
< ul >
282
348
< li > < a href ="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#384 " target ="_blank "> LWG Issue 384. < code > equal_range</ code > has unimplementable runtime complexity</ a > </ li >
283
349
< li > < a href ="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0202r3.html " target ="_blank "> P0202R3 Add Constexpr Modifiers to Functions in < code > <algorithm></ code > and < code > <utility></ code > Headers</ a > </ li >
350
+ < li > < a href ="https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2248r8.html " target ="_blank "> P2248R8 Enabling list-initialization for algorithms</ a > < ul >
351
+ < li > C++26で波カッコ初期化 (リスト初期化) に対応した</ li >
352
+ </ ul >
353
+ </ li >
284
354
</ ul > </ div >
285
355
286
356
</ div >
0 commit comments