== map == * dictionary 구조를 구현하였다. DataStructure 에서는 symbol table 이라고 말한다. * dictionary 구조란 '''key''' 와 '''value'''가 존재하며, '''key'''를 이용하여 '''value'''를 찾는 자료구조이다. * 이 구조는 각 언어마다 다양한 이름을 가진다. || Perl, PHP || Associated Array || || Python || dictionary || || Java || {{{~cpp HashMap, Hashtable}}} || || STL(C++) || map || * include : map {{{~cpp #include }}} === 선언 === {{{~cpp // map map m; }}} === key 넣기 === {{{~cpp m["홍길동"] = 20; }}} === 순회 === * STL의 container 들은 모두 비슷한 모양의 순회를 한다. * map 은 내부에 STL의 pair 를 이용하여 구현한다. 그래서, iterator 가 가리키는 것은 pair 형이다. * 내부 인자들은 정열되어 있다. {{{~cpp // for 에서 반복자 이용 순회 for(map::iterator i; i = m.begin() ; i != m.end() ; ++i) { cout << "key: " << (*i).first << "value: " << (*i).second << endl; } }}} === 프로그램의 예 === {{{~cpp #include #include #include using namespace std; int main() { map directory; directory["홍길동"] = 1234567l; directory["김철수"] = 9876543l; directory["김봉남"] = 3459876l; cout << "전화 번호부의 내용은 " <::iterator i; i = directory.begin(); for ( ; i != directory.end();i++) cout << "이름:" << (*i).first << " 전화번호: " << (*i).second << endl; cout << "입니다. "<> name ){ if ( name.compare("exit") ==0)break; cout << "이름을 입력해 주세요.(종료:exit):"; if (directory.find(name) != directory.end()) cout << name << "의 전화번호는" << directory[name] << "입니다.n"; else cout << "죄송합니다. 그 이름이 전화 번호부에 없습니다." << name << "n"; } return 0; } }}} === Thread === 아쉬운점 : VC++ 6.0 에서 map 한번 쓰면 warning 이 72개가 뜬다; STLPort 를 써야 할까.. warning 의 이유는 STL에서 나오는 디버그의 정보가 VC++ 디버그 정보를 위해 할당하는 공간(255byte)보다 많기 때문입니다. 보통 디버그 모드로 디버깅을 하지 않으면, Project setting에서 C/C++ 텝에서 Debug info 를 최소한 line number only 로 해놓으면 warning 는 없어 집니다. 그래도 warning 가 난다면 C/C++ 텝에서 Generate browse info 를 비활성(기본값)화 시키세요. # pragma warning( disable : 4786 ) 하시면 됩니다. ---- ["STL"]