|
28 | 28 | <meta property="og:url" content="https://cpprefjp.github.io/reference/flat_map/flat_multimap.html" />
|
29 | 29 | <meta property="og:site_name" content="cpprefjp - C++日本語リファレンス" />
|
30 | 30 | <meta property="og:type" content="article" />
|
31 |
| - <meta property="og:description" content="" /> |
| 31 | + <meta property="og:description" content="`flat_multimap` は同一キーの要素を複数格納できる連想コンテナの一種であり、キーとそれに対応する値を格納する。" /> |
32 | 32 | <meta name="twitter:card" content="summary" />
|
33 | 33 | <meta name="twitter:title" content="flat_multimap - cpprefjp C++日本語リファレンス" />
|
34 | 34 | <meta name="twitter:url" content="https://cpprefjp.github.io/reference/flat_map/flat_multimap.html" />
|
35 |
| - <meta name="twitter:description" content="" /> |
| 35 | + <meta name="twitter:description" content="`flat_multimap` は同一キーの要素を複数格納できる連想コンテナの一種であり、キーとそれに対応する値を格納する。" /> |
36 | 36 |
|
37 | 37 |
|
38 | 38 | <link rel="alternate" type="application/atom+xml" title="Atom" href="https://cpprefjp.github.io/rss.xml" />
|
|
188 | 188 |
|
189 | 189 | <p class="text-right"><small>
|
190 | 190 | 最終更新日時(UTC):
|
191 |
| - <span itemprop="datePublished" content="2025-02-11T00:56:25"> |
192 |
| - 2025年02月11日 00時56分25秒 |
| 191 | + <span itemprop="datePublished" content="2025-05-14T06:56:34"> |
| 192 | + 2025年05月14日 06時56分34秒 |
193 | 193 | </span>
|
194 | 194 | <br/>
|
195 | 195 | <span itemprop="author" itemscope itemtype="http://schema.org/Person">
|
196 |
| - <span itemprop="name">suomesta</span> |
| 196 | + <span itemprop="name">Akira Takahashi</span> |
197 | 197 | </span>
|
198 | 198 | が更新
|
199 | 199 | </small></p>
|
|
224 | 224 | </code></pre></div>
|
225 | 225 | </p>
|
226 | 226 | <h2>概要</h2>
|
| 227 | +<p><code>flat_multimap</code> は同一キーの要素を複数格納できる連想コンテナの一種であり、キーとそれに対応する値を格納する。</p> |
| 228 | +<p><code>std::flat_multimap</code>は、ノードベースで実装される<code><a href="../map/multimap.html">std::multimap</a></code>、ハッシュテーブルで実装される<code><a href="../unordered_map/unordered_multimap.html">std::unordered_multimap</a></code>とは異なり、ソート済み配列と二分探索の組み合わせで実装される。これはほかの実装と比較して、メモリ使用量と列挙速度において優位であり、一方で挿入速度と検索速度はほかの実装に劣る。</p> |
| 229 | +<p>また、このクラスは分類としては<code><a href="../queue/queue.html">std::queue</a></code>や<code><a href="../stack/stack.html">std::skack</a></code>と同様のコンテナアダプタに分類され、キーの配列と値の配列の2つを内部で持ち、それを<code><a href="../ranges/zip_view.html">std::ranges::zip_view</a></code>で綴じあわせて扱う実装となっている。</p> |
| 230 | +<p>このコンテナクラスは、ランダムアクセスイテレータをサポートする。</p> |
| 231 | +<h3>ほかの連想コンテナとの要件の違い</h3> |
| 232 | +<p>このクラスは要件として、コンテナクラスと、逆順コンテナクラスであることは満たすが、連想コンテナの要件としては以下を満たさない:</p> |
| 233 | +<ul> |
| 234 | +<li>node handleに関する要件</li> |
| 235 | +<li>イテレータ無効化に関する要件</li> |
| 236 | +<li>単一要素の挿入と削除に線形時間かかる (挿入位置のイテレータを指定したとしても)</li> |
| 237 | +</ul> |
| 238 | +<p>また、このコンテナはメモリアロケータを指定できない設計にもなっている。</p> |
| 239 | +<p><code>value_type</code>は、<code><a href="../map/multimap.html">std::multimap</a></code>では<code><a href="../utility/pair.html">std::pair</a><const Key, T></code>だが、このクラスは<code><a href="../utility/pair.html">std::pair</a><Key, T></code>である (<code>const</code>がつかない)。</p> |
| 240 | +<p>以下の不変条件をもち、メンバ関数のいずれかが<a class="cpprefjp-defined-word" data-desc="問題が発生したときに、現在実行位置を過去に通過・記録した位置に戻し、文脈情報を添えて紐づけられた処理(例外ハンドラー)を呼び出す仕組み。またはその事態">例外</a>によって終了した場合には不変条件の状態に復元される (ただし、その復元操作によってコンテナが空になる可能性がある):</p> |
| 241 | +<ul> |
| 242 | +<li>キーの配列と値の配列が、同じ要素数をもつ</li> |
| 243 | +<li>キーの配列が、指定された比較関数オブジェクトを尊重してソートを行う</li> |
| 244 | +<li>値の配列内のオフセット<code>off</code>の値は、キー配列内のオフセット<code>off</code>のキーに関連付けられた値である</li> |
| 245 | +</ul> |
| 246 | +<h2><a class="cpprefjp-defined-word" data-desc="関数等の意味論を構成する要素の1つ。Constraints。関数であればオーバーロード解決に参加するための条件、それ以外であれば受け付ける型の条件">テンプレートパラメータ制約</a></h2> |
| 247 | +<ul> |
| 248 | +<li><code>KeyContainer</code>と<code>MappedContainer</code>に指定するコンテナ型は、<ul> |
| 249 | +<li>シーケンスコンテナの要件を満たし、</li> |
| 250 | +<li>ランダムアクセスイテレータをもち、</li> |
| 251 | +<li><a class="cpprefjp-defined-word" data-desc="問題が発生したときに、現在実行位置を過去に通過・記録した位置に戻し、文脈情報を添えて紐づけられた処理(例外ハンドラー)を呼び出す仕組み。またはその事態">例外</a>を送出しないメンバ関数<code>size()</code>と<code>max_size()</code>をもつこと</li> |
| 252 | +</ul> |
| 253 | +</li> |
| 254 | +</ul> |
| 255 | +<h2><a class="cpprefjp-defined-word" data-desc="関数等の意味論を構成する要素の1つ。Mandates。満たさなければプログラムが不適格となる要件。この要件は、オーバーロード解決によって選択された関数内での`static_assert`の定数条件式や、関数に対するdelete宣言などで表現できる">適格要件</a></h2> |
| 256 | +<ul> |
| 257 | +<li><code>Key</code>が<code>KeyContainer::value_type</code>と同じ型であること</li> |
| 258 | +<li><code>T</code>が<code>MappedContainer::value_type</code>と同じ型であること</li> |
| 259 | +</ul> |
227 | 260 | <h2>メンバ関数</h2>
|
228 | 261 | <h3>構築・破棄</h3>
|
229 | 262 | <table border="1" bordercolor="#888" style="border-collapse:collapse">
|
|
0 commit comments