|
68 | 68 |
|
69 | 69 | </head>
|
70 | 70 | <body>
|
71 |
| -<header data-kunai-mdinfo="{"meta": {"header": ["algorithm"], "namespace": ["std::ranges"], "id-type": ["function template"], "cpp": ["cpp20"]}, "sources": [{"id": "45332a17c097e6a2a7f9e6ffb13dfbbc6e6a2465", "source": "#include <algorithm>\n#include <iostream>\n#include <array>\n\nint main() {\n constexpr std::array v = { 1,4,3,3,1,2,2,1 };\n\n // \u5024\u304c 1 \u306e\u8981\u7d20\u304c\u3044\u304f\u3064\u3042\u308b\u304b\u3092\u6570\u3048\u308b\n int n = std::ranges::count(v, 1);\n std::cout << \"count of 1: \" << n << std::endl;\n}\n"}, {"id": "f23abd2a3412abbb16ca324d9e32d2ba62615afa", "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};\n\nint main() {\n std::vector<Point> v = {\n {1, 2},\n {3, 4},\n {5, 6},\n {1, 2},\n };\n\n // \u5024\u304c {1, 2} \u306e\u8981\u7d20\u304c\u3044\u304f\u3064\u3042\u308b\u304b\u3092\u6570\u3048\u308b\n int n = std::ranges::count(v, {1, 2});\n std::cout << \"count of {1,2}: \" << n << std::endl;\n}\n"}], "page_id": ["reference", "algorithm", "ranges_count"]}"> |
| 71 | +<header data-kunai-mdinfo="{"meta": {"header": ["algorithm"], "namespace": ["std::ranges"], "id-type": ["function template"], "cpp": ["cpp20"]}, "sources": [{"id": "45332a17c097e6a2a7f9e6ffb13dfbbc6e6a2465", "source": "#include <algorithm>\n#include <iostream>\n#include <array>\n\nint main() {\n constexpr std::array v = { 1,4,3,3,1,2,2,1 };\n\n // \u5024\u304c 1 \u306e\u8981\u7d20\u304c\u3044\u304f\u3064\u3042\u308b\u304b\u3092\u6570\u3048\u308b\n int n = std::ranges::count(v, 1);\n std::cout << \"count of 1: \" << n << std::endl;\n}\n"}, {"id": "f23abd2a3412abbb16ca324d9e32d2ba62615afa", "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};\n\nint main() {\n std::vector<Point> v = {\n {1, 2},\n {3, 4},\n {5, 6},\n {1, 2},\n };\n\n // \u5024\u304c {1, 2} \u306e\u8981\u7d20\u304c\u3044\u304f\u3064\u3042\u308b\u304b\u3092\u6570\u3048\u308b\n int n = std::ranges::count(v, {1, 2});\n std::cout << \"count of {1,2}: \" << n << std::endl;\n}\n"}, {"id": "72dd84014c7fd8c11eb4d56a0960cd0b5cf37d28", "source": "#include <algorithm>\n#include <iostream>\n#include <vector>\n#include <string>\n\nstruct Item {\n int id;\n std::string label;\n};\n\nint main() {\n std::vector<Point> v = {\n {1, \"foo\"},\n {3, \"bar\"},\n {5, \"foo\"},\n {2, \"baz\"},\n };\n\n // \u30e1\u30f3\u30d0\u5909\u6570\u30dd\u30a4\u30f3\u30bf\u3092\u4f7f\u3063\u3066 label==\"foo\" \u306e\u8981\u7d20\u6570\u3092\u6570\u3048\u308b\n int n1 = std::ranges::count(v, std::string(\"foo\"), &Item::label);\n std::cout << \"count of label==\\\"foo\\\": \" << n1 << std::endl;\n\n // \u30e9\u30e0\u30c0\u5f0f\u3092\u4f7f\u3063\u3066 id==1 \u306e\u8981\u7d20\u6570\u3092\u6570\u3048\u308b\n int n2 = std::ranges::count(v, 1, [](const Item& p) { return p.id; });\n std::cout << \"count of id==1: \" << n2 << std::endl;\n}\n"}], "page_id": ["reference", "algorithm", "ranges_count"]}"> |
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="2025-05-26T07:38:51"> |
192 |
| - 2025年05月26日 07時38分51秒 |
| 191 | + <span itemprop="datePublished" content="2025-05-27T08:23:04"> |
| 192 | + 2025年05月27日 08時23分04秒 |
193 | 193 | </span>
|
194 | 194 | <br/>
|
195 | 195 | <span itemprop="author" itemscope itemtype="http://schema.org/Person">
|
@@ -337,6 +337,39 @@ <h3>波カッコ初期化を入力として使用する (C++26)</h3>
|
337 | 337 | <h4>出力</h4>
|
338 | 338 | <p><pre><code>count of {1,2}: 2
|
339 | 339 | </code></pre></p>
|
| 340 | +<h3>射影変換を使用した例</h3> |
| 341 | +<p><div class="yata" id="72dd84014c7fd8c11eb4d56a0960cd0b5cf37d28"><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> |
| 342 | +<span class="cp">#include</span> <span class="cpf"><a href="../iostream.html"><iostream></a></span><span class="cp"></span> |
| 343 | +<span class="cp">#include</span> <span class="cpf"><a href="../vector.html"><vector></a></span><span class="cp"></span> |
| 344 | +<span class="cp">#include</span> <span class="cpf"><a href="../string.html"><string></a></span><span class="cp"></span> |
| 345 | + |
| 346 | +<span class="k">struct</span> <span class="n">Item</span> <span class="p">{</span> |
| 347 | + <span class="kt">int</span> <span class="n">id</span><span class="p">;</span> |
| 348 | + <span class="n"><a href="../string/basic_string.html">std::string</a></span> <span class="n">label</span><span class="p">;</span> |
| 349 | +<span class="p">};</span> |
| 350 | + |
| 351 | +<span class="kt">int</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span> |
| 352 | + <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> |
| 353 | + <span class="p">{</span><span class="mi">1</span><span class="p">,</span> <span class="s">"foo"</span><span class="p">},</span> |
| 354 | + <span class="p">{</span><span class="mi">3</span><span class="p">,</span> <span class="s">"bar"</span><span class="p">},</span> |
| 355 | + <span class="p">{</span><span class="mi">5</span><span class="p">,</span> <span class="s">"foo"</span><span class="p">},</span> |
| 356 | + <span class="p">{</span><span class="mi">2</span><span class="p">,</span> <span class="s">"baz"</span><span class="p">},</span> |
| 357 | + <span class="p">};</span> |
| 358 | + |
| 359 | + <span class="c1">// メンバ変数ポインタを使って label=="foo" の要素数を数える</span> |
| 360 | + <span class="kt">int</span> <span class="n">n1</span> <span class="o">=</span> <span class="n"><span style="color:#ff0000">std::ranges::count</span></span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="n"><a href="../string/basic_string.html">std::string</a></span><span class="p">(</span><span class="s">"foo"</span><span class="p">),</span> <span class="o">&</span><span class="n">Item</span><span class="o">::</span><span class="n">label</span><span class="p">);</span> |
| 361 | + <span class="n"><a href="../iostream/cout.html">std::cout</a></span> <span class="o"><<</span> <span class="s">"count of label==</span><span class="se">\"</span><span class="s">foo</span><span class="se">\"</span><span class="s">: "</span> <span class="o"><<</span> <span class="n">n1</span> <span class="o"><<</span> <span class="n"><a href="../ostream/endl.html">std::endl</a></span><span class="p">;</span> |
| 362 | + |
| 363 | + <span class="c1">// ラムダ式を使って id==1 の要素数を数える</span> |
| 364 | + <span class="kt">int</span> <span class="n">n2</span> <span class="o">=</span> <span class="n"><span style="color:#ff0000">std::ranges::count</span></span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="p">[](</span><span class="k">const</span> <span class="n">Item</span><span class="o">&</span> <span class="n">p</span><span class="p">)</span> <span class="p">{</span> <span class="k">return</span> <span class="n">p</span><span class="p">.</span><span class="n">id</span><span class="p">;</span> <span class="p">});</span> |
| 365 | + <span class="n"><a href="../iostream/cout.html">std::cout</a></span> <span class="o"><<</span> <span class="s">"count of id==1: "</span> <span class="o"><<</span> <span class="n">n2</span> <span class="o"><<</span> <span class="n"><a href="../ostream/endl.html">std::endl</a></span><span class="p">;</span> |
| 366 | +<span class="p">}</span> |
| 367 | +</code></pre></div> |
| 368 | +</div></p> |
| 369 | +<h4>出力</h4> |
| 370 | +<p><pre><code>count of label=="foo": 2 |
| 371 | +count of id==1: 2 |
| 372 | +</code></pre></p> |
340 | 373 | <h2>実装例</h2>
|
341 | 374 | <p><div class="codehilite"><pre><span></span><code><span class="k">struct</span> <span class="n">count_impl</span> <span class="p">{</span>
|
342 | 375 | <span class="k">template</span><span class="o"><</span><span class="n"><a href="../iterator/input_iterator.html">input_iterator</a></span> <span class="n">I</span><span class="p">,</span> <span class="n"><a href="../iterator/sentinel_for.html">sentinel_for</a></span><span class="o"><</span><span class="n">I</span><span class="o">></span> <span class="n">S</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">Proj</span> <span class="o">=</span> <span class="n"><a href="../functional/identity.html">identity</a></span><span class="o">></span>
|
|
0 commit comments