본문 바로가기
카테고리 없음

map 사용법

by ByteBridge 2013. 3. 29.
반응형

// 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;

}


반응형