2017. 1. 4. 22:47ㆍIT-개발/C및C++
hash_map을 사용하는 경우
1. 많은 자료를 저장하고, 검색 속도가 빨라야 한다.
2. 너무 빈번하게 자료를 삽입, 삭제 하지 않는다.
#include <iostream>
#include <hash_map>
using namespace std;
using namespace stdext;
// 게임 캐릭터
struct GameCharacter
{
// 아래의 인자를 가지는 생성자를 정의한 경우는
// 꼭 기본 생성자를 정의해야 컨테이너에서 사용할 수 있다.
GameCharacter() { }
GameCharacter( int CharCd, int Level, int Money )
{
_CharCd = CharCd;
_Level = Level;
_Money = Money;
}
int _CharCd; // 캐릭터 코드
int _Level; // 레벨
int _Money; // 돈
};
void main()
{
hash_map<int, GameCharacter> Characters;
GameCharacter Character1(12, 7, 1000 );
Characters.insert(hash_map<int, GameCharacter>::value_type(12, Character1));
GameCharacter Character2(15, 20, 111000 );
Characters.insert(hash_map<int, GameCharacter>::value_type(15, Character2));
GameCharacter Character3(200, 34, 3345000 );
Characters.insert(hash_map<int, GameCharacter>::value_type(200, Character3));
// iterator와 begin, end 사용
// 저장한 요소를 정방향으로 순회
hash_map<int, GameCharacter>::iterator Iter1;
for( Iter1 = Characters.begin(); Iter1 != Characters.end(); ++Iter1 )
{
cout << "캐릭터 코드 : " << Iter1->second._CharCd << " | 레벨 : " <<
Iter1->second._Level << "| 가짂 돈 : " << Iter1->second._Money << endl;
}
cout << endl;
// rbegin, rend 사용
// 저장한 요소의 역방향으로순회
hash_map<int, GameCharacter>::reverse_iterator RIter;
for( RIter = Characters.rbegin(); RIter != Characters.rend(); ++RIter )
{
cout << "캐릭터 코드 : " << RIter->second._CharCd << " | 레벨 : " <<
RIter->second._Level << "| 가짂 돈 : " << RIter->second._Money << endl;
}
cout << endl << endl;
// Characters에 저장한 요소 수
int CharacterCount = Characters.size();
// 검색.
// 캐릭터 코드 15인 캐릭터를 찾는다.
hash_map<int, GameCharacter>::iterator FindIter = Characters.find(15);
// 찾지 못했다면 FindIter은 end 위치의 반복자가 리턴된다.
if( Characters.end() == FindIter )
{
cout << "캐릭터 코드가 20인 캐릭터가 없습니다" << endl;
}
else
{
cout << "캐릭터 코드가 15인 캐릭터를 찾았습니다." << endl;
cout << "캐릭터 코드 : " << FindIter->second._CharCd << " | 레벨 : " <<
FindIter->second._Level << "| 가짂 돈 : " << FindIter->second._Money << endl;
}
cout << endl;
for( Iter1 = Characters.begin(); Iter1 != Characters.end(); ++Iter1 )
{
cout << "캐릭터 코드 : " << Iter1->second._CharCd << " | 레벨 : " << Iter1-
>second._Level << "| 가짂 돈 : " << Iter1->second._Money << endl;
}
cout << endl << endl;
// 삭제
// 캐릭터 코드가 15인 캐릭터를 삭제한다.
Characters.erase( 15 );
for( Iter1 = Characters.begin(); Iter1 != Characters.end(); ++Iter1 )
{
cout << "캐릭터 코드 : " << Iter1->second._CharCd << " | 레벨 : " <<
Iter1- >second._Level << "| 가짂 돈 : " << Iter1->second._Money << endl;
}
cout << endl << endl;
// 모든 캐릭터를 삭제한다.
Characters.erase( Characters.begin(), Characters.end() );
// Characters 공백 조사
if( Characters.empty() )
{
cout << "Characters는 비어 있습니다." << endl;
}
}
'IT-개발 > C및C++' 카테고리의 다른 글
STL - map - sample(1) (0) | 2017.01.04 |
---|---|
STL - hash_map - sample(2) (0) | 2017.01.04 |
STL - Deque - sample(1) (0) | 2017.01.04 |
STL - Deque (0) | 2017.01.04 |
문법 - C++ - static_cast, dynamic_cast, const_cast, reinterpret_cast (0) | 2016.12.02 |