c++のvectorとmap

結論としては、vectorとかmapとかの、初歩的なコンテナをいじいじした話

 

コンテナとは?

 ~ 同じ型のオブジェクトの集まりを表現するクラス。

   Cで言う、配列と構造体を合わせて、かつオブジェクト指向に対応させたもの。

 

で、今日主に使ったのが、vectorコンテナとmapコンテナ。

 

以下のサイトを参考にしました。

C++編(標準ライブラリ) 第2章 vector

C++編(標準ライブラリ) 第10章 map

 

イテレータの生成と使い方が分かれば、OKなのかも。

 

ハマった所としては、

 std::vector<int> hoge(100);

と初期化すると、hogevectorに与えられた型によって、値を持つから注意。

 

上のint型だと、各vectorの要素が0を持つので、push_backとかすると悲惨になる。

動的配列なので、配列と違って初期化とか考えず使うのがベストかも。

 

mapは、key値にソート(比較)できる型じゃないとエラーを吐く。

 

後、文字列のsplitが分からなかったので、以下のコードを利用した。

C++で文字列のsplit | Story of Your Life

 

このうち、

std::vector<std::string> split(const std::string &str, char delim){

  std::istringstream iss(str); std::string tmp; std::vector<std::string> res;

  while(getline(iss, tmp, delim)) res.push_back(tmp);

  return res;

}

 

を利用させて貰いました。

まるで動作がわからないけど・・・

 

次は、boost_pythonを利用して、pythonの拡張ライブラリをc++で書く。

 

*追記

 mapのvalueにコンテナを入れる時のハマりどころ

 ○ std::map<int, vector<int> > hoge;

 × std::map<int, vector<int>> hoge;

 

 理由は、std::coutに利用される<< や >>と区別をつけるため。

 知らないでいると、辛い。

 

 あと、std::set<int>について

C++マニアック,STL の set の使い方,how to use STL set,標準テンプレートライブラリ,standard template library,コンテナ,container,C++言語講座

 

 ぶっちゃけ、集合演算がめんどい・・・

 簡単に演算子で計算できないものか、スクリプトの集合演算に慣れるとなかなかつらい。