map ¶
- dictionary 구조를 구현하였다. DataStructure 에서는 symbol table 이라고 말한다.
- dictionary 구조란 key 와 value가 존재하며, key를 이용하여 value를 찾는 자료구조이다.
- 이 구조는 각 언어마다 다양한 이름을 가진다.
Perl, PHP Associated Array Python dictionary Java ~cpp HashMap, HashtableSTL(C++) map - include : map
~cpp #include <map>
선언 ¶
~cpp // map<key_type, value_type> map<string, long> m;
key 넣기 ¶
~cpp m["홍길동"] = 20;
순회 ¶
~cpp
// for 에서 반복자 이용 순회
for(map<int, int>::iterator i; i = m.begin() ; i != m.end() ; ++i) {
cout << "key: " << (*i).first
<< "value: " << (*i).second << endl;
}
프로그램의 예 ¶
~cpp
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main()
{
map<string, long> directory;
directory["홍길동"] = 1234567l;
directory["김철수"] = 9876543l;
directory["김봉남"] = 3459876l;
cout << "전화 번호부의 내용은 " <<endl;
map<string, long>::iterator i;
i = directory.begin();
for ( ; i != directory.end();i++)
cout << "이름:" << (*i).first
<< " 전화번호: " << (*i).second << endl;
cout << "입니다. "<<endl;
string name;
while( cin >> 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 를 써야 할까..
----
STL
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










