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 どっちがいいのかしら。
今度検証しよう。