STLのお勉強。

昔はこういうことをしたいときは、こんないけてないことをしていた。

  • マジックナンバー
  • const char * [][2]
  • ねっとりしたfor文  for( i=0; (char *)str_list[i][0] != NULL ; i++)

c++プログラミングの処方箋」を読んで改心する。

g++ -g -O2 -Wall -ggdb -pg  -I. map.cc -o map -lm -lstdc++
  1 #include <map>
  2 #include <string>
  3 #include <iostream>
  4 
  5 int main()
  6 {
  7     using namespace std;
  8 
  9     enum human { ADDR, NAME, SEX };
 10 
 11     struct my_list {
 12         int     key;
 13         string  value;
 14     };
 15 
 16     struct my_list moge[] = {
 17         { ADDR,  "千葉県千葉市"   },
 18         { NAME,  "七氏の権兵衛"   },
 19         { SEX ,  "男"   },
 20     };
 21 
 22     map<int, string> my_names;  // キーがint、値がchar*のmap
 23     int moge_len = sizeof(moge) / sizeof(moge[0]);
 24     for ( int i = 0; i < moge_len; i++ ) {
 25         my_names.insert( pair<int, string>( moge[i].key, moge[i].value ) );
 26     }
 27 
 28     // 要素を出力する
 29     map<int, string>::iterator it = my_names.begin();
 30     while( it != my_names.end() )
 31     {
 32         cout << (*it).first << ":" << (*it).second << endl;
 33         ++it;
 34     }
 35     
 36     cout << "keyで取れるかな? key=NAME value=" << my_names[NAME] << endl;
 37     return 0;
 38 }

まだ23行辺りに疑問があるけど、ずいぶんとましなコードになったんじゃないかな。
mapは二分木(だと思う)。
実際にはhashじゃないとこの辺の用途はどうかなと思う。

BOOSTのhashとSTLport どっちがいいのかしら。
今度検証しよう。