「コンテナ」の版間の差分

提供: C++入門
移動: 案内検索
(ページの作成:「コンテナ (container)とは、オブジェクトの集まりを表現するデータ構造、クラスです。コンテナには、いろいろな種類...」)
 
 
(同じ利用者による、間の2版が非表示)
行1: 行1:
[[コンテナ]] (container)とは、オブジェクトの集まりを表現するデータ構造、[[クラス]]です。[[コンテナ]]には、いろいろな種類があり、それぞれ目的ごとに使い分けます。
+
[[コンテナ]] (container)とは、オブジェクトの集まりを表現するデータ構造、[[クラス]]です。[[C++]]の[[STL]]で用意されている[[コンテナ]]には、いろいろな種類があり、それぞれ目的ごとに使い分けます。ここでの[[コンテナ]]は、Dockerのようなプロセス空間を分離するためのテクノロジーではありません。
  
 
'''読み方'''
 
'''読み方'''
行14: 行14:
 
* ハッシュ
 
* ハッシュ
 
* 連想配列
 
* 連想配列
 
 
== コンテナの初期化 ==
 
== コンテナの初期化 ==
 
* [[std::initializer_list]]で宣言時の初期化リストで初期化する。
 
* [[std::initializer_list]]で宣言時の初期化リストで初期化する。
行22: 行21:
 
* [[std::fill]]で各要素に同じ値を代入する。
 
* [[std::fill]]で各要素に同じ値を代入する。
 
* [[for]]文で[[std::vector::push_back]]で1つ1つプッシュする。
 
* [[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]] を使用します。
 
== 関連項目 ==
 
== 関連項目 ==
 
{{container}}
 
{{container}}
<!-- vim: filetype=mediawiki -->
+
<!-- vim: filetype=mediawiki
 +
-->

2015年12月13日 (日) 12:37時点における最新版

コンテナ (container)とは、オブジェクトの集まりを表現するデータ構造、クラスです。C++STLで用意されているコンテナには、いろいろな種類があり、それぞれ目的ごとに使い分けます。ここでのコンテナは、Dockerのようなプロセス空間を分離するためのテクノロジーではありません。

読み方

コンテナ
こんてな
container
こんてな

概要

コンテナには、以下ような種類があります。

  • 配列
  • リスト
  • スタック
  • キュー
  • ハッシュ
  • 連想配列

コンテナの初期化

STLコンテナの使い分け

連想配列を使いたい

要素数が固定の場合

  • ビット値の場合は 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 を利用します。
  • 速度を重視し、検索頻度が高い場合

関連項目

シーケンスコンテナ

連想コンテナ

連行コンテナ 順不同

コンテナアダプタ

コンテナへのアクセスで利用

コンテナで役立つC++11以降の機能