// Map_Test.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다.
//
/************************************************************************/
/* 맵을 언제 사용해야 적합한가?
1. 정렬
2. 많은 자료를 저장하고,검색이 빨라야한다
3. 빈번하게 삽입삭제가 일어나는곳에는 사용하지않는다
맵 사용법
map< key 자료 type,value 자료 type>변수이름
map< int , int > map1;
value 는 저장할 자료,
key 는 value를 가리키는것
ex: key의 자료형 int,
value 자료형 int 인 map 을 생성
key 값을 대상으로 오름차순 한다.
map 은 이미 있는 key값을 추가할수없다.
operator[]를 사용하여 추가하는 방법
insert가 아닌 operator[]를 사용하여 추가할수있음
-> key 10, value 80을 추가하는 방법
map1[10] = 80;
반복자의 사용:
정방향 반복자 -> begin(),end()
역방향 반복자 -> rebegin(),rend()를 지원함
*/
/************************************************************************/
#include "stdafx.h"
#include <map>
#include<string>
#include<iostream>
using namespace std;
struct Item
{
char name[20];
char kind;
int BuyMoney;
int SkilCd;
};
int _tmain(int argc, _TCHAR* argv[])
{
map<char* , Item> Items;
map<char*,Item>::iterator IterPos;
typedef pair<char*,Item> ItemPair;
//->아이템 1
Item Item1;
strncpy_s(Item1.name,"긴칼",32);
Item1.kind = 1;
Item1.BuyMoney = 200;
Item1.SkilCd = 0;
//->아이템 2
Item Item2;
strncpy_s(Item2.name,"방패",32);
Item2.kind = 2;
Item2.BuyMoney = 1000;
Item2.SkilCd = 4;
//->아이템 3
Item Item3;
strncpy_s(Item3.name,"해머",32);
Item3.kind = 3;
Item3.BuyMoney = 500;
Item3.SkilCd = 0;
//Items에 아이템 추가
Items.insert(map<char*,Item>::value_type(Item2.name,Item2));
Items.insert(ItemPair(Item1.name,Item1));
Items.insert(ItemPair(Item3.name,Item3));
//Items가 비어있지않다면
if (false == Items.empty())
{
cout<<"저장된 아이템 개수 :"<<Items.size()<<endl<<endl;
}
for (IterPos = Items.begin();IterPos !=Items.end();++IterPos)
{
cout<<"이름: "<<IterPos->first<<",가격: "<<IterPos->second.BuyMoney<<endl;
}
cout<<endl;
cout<<"올림차순으로 정렬되어있는 map(Key 자료형으로 string 사용)"<<endl<<endl;
map<string,Item,less<string>>Items2;
map<string,Item,less<string>>::iterator IterPos2;
Items2.insert(map<string,Item>::value_type(Item2.name,Item2));
Items2.insert(ItemPair(Item1.name,Item1));
//operator[] 를 사용하여 저장
Items2[Item3.name] = Item3;
for (IterPos2 = Items2.begin();IterPos2 != Items2.end();++IterPos2)
{
cout<<"이름: "<<IterPos2->first<<",가격 :"<<IterPos2->second.BuyMoney<<endl;
}
cout<<endl;
cout<<"해머에 대한 정보 찾기 :"<<endl;
cout<<"해머가격 :";
IterPos2 = Items2.find("해머");
if (IterPos2 != Items2.end())
{
cout<<IterPos2->second.BuyMoney<<endl;
}
else
{
cout<<"해머가 없습니다"<<endl;
}
cout<<endl;
//아이템 "긴칼"을 삭제한다.
IterPos2 = Items2.find("긴칼");
if (IterPos2 != Items2.end())
{
Items2.erase(IterPos2);
cout<<"긴칼을 삭제 하였습니다."<<endl;
}
cout<<"Items2에 있는 아이템 개수 :"<<Items2.size()<<endl<<endl;
//삭제된 긴칼에 대한 정보 찾아보기
IterPos2 = Items2.find("긴칼");
if (IterPos2 == Items2.end())
{
cout<<"Items2에 '긴칼' 이 없습니다."<<endl<<endl;
}
return 0;
}