「コンテナ」の版間の差分
提供: C++入門
行1: | 行1: | ||
− | [[コンテナ]] (container)とは、オブジェクトの集まりを表現するデータ構造、[[クラス]]です。[[C++]]の[[STL]]で用意されている[[コンテナ]] | + | [[コンテナ]] (container)とは、オブジェクトの集まりを表現するデータ構造、[[クラス]]です。[[C++]]の[[STL]]で用意されている[[コンテナ]]には、いろいろな種類があり、それぞれ目的ごとに使い分けます。ここでの[[コンテナ]]は、Dockerのようなプロセス空間を分離するためのテクノロジーではありません。 |
'''読み方''' | '''読み方''' | ||
行14: | 行14: | ||
* ハッシュ | * ハッシュ | ||
* 連想配列 | * 連想配列 | ||
− | |||
== コンテナの初期化 == | == コンテナの初期化 == | ||
* [[std::initializer_list]]で宣言時の初期化リストで初期化する。 | * [[std::initializer_list]]で宣言時の初期化リストで初期化する。 |
2015年12月13日 (日) 12:37時点における最新版
コンテナ (container)とは、オブジェクトの集まりを表現するデータ構造、クラスです。C++のSTLで用意されているコンテナには、いろいろな種類があり、それぞれ目的ごとに使い分けます。ここでのコンテナは、Dockerのようなプロセス空間を分離するためのテクノロジーではありません。
読み方
- コンテナ
- こんてな
- container
- こんてな
概要
コンテナには、以下ような種類があります。
- 配列
- リスト
- スタック
- キュー
- ハッシュ
- 連想配列
コンテナの初期化
- std::initializer_listで宣言時の初期化リストで初期化する。
- std::iotaで各要素に連番の値を代入する。
- std::generateで各要素に値を代入する。
- std::for_eachで各要素に値を代入する。
- std::fillで各要素に同じ値を代入する。
- for文でstd::vector::push_backで1つ1つプッシュする。
STLコンテナの使い分け
連想配列を使いたい
- std::tr1::unordered_mapを使用します。
要素数が固定の場合
- ビット値の場合は bitset を利用します。
- ビット値以外の場合は、std::array を使用します。
要素数が固定ではなく、連想配列ではない
- 要素数が少ない場合は、std::vectorを利用します。
- メモリ効率を優先する場合
- 先頭や末尾の挿入や削除の頻度が高い場合は、std::dequeを使用します。
- それ以外は、std::vectorを利用します。
- 速度重視で、ランダムアクセスの頻度が高い場合
- 先頭や末尾の挿入や削除の頻度が高い場合は、std::dequeを使用します。
- それ以外は、std::vectorを利用します。
- ランダムアクセスの速度を妥協できて、要素の挿入・削除の速度を上げる場合
- キーを大きさの順番で保持する必要がなければ、std::unordered_mapを使用します。
- 順序の保持が必要であれば、std::map を利用します。
- 速度を重視し、挿入・削除の頻度が高い場合
- 先頭・末尾の挿入・削除の頻度が高い場合は、std::deque を使用します。
- 途中の要素の挿入・削除の頻度が高い場合は、std::forward_list
- それ以外は、std::list を利用します。
- 速度を重視し、検索頻度が高い場合
- std::unordered_set, std::unordered_multiset
- それ以外は、std::set, set::multiset を使用します。
関連項目
シーケンスコンテナ
連想コンテナ
連行コンテナ 順不同
コンテナアダプタ
コンテナへのアクセスで利用
コンテナで役立つC++11以降の機能
- std::iotaで各要素に連番の値を代入する。
- std::generateで各要素に値を代入する。
- std::for_eachで各要素に値を代入する。
- std::fillで各要素に同じ値を代入する。
- for文でstd::vector::push_backで1つ1つプッシュする。