먼저 MAP을 잘 모른다면 먼저 밑의 글을 읽고 와주세요
개요
코드에 많은 구조체가 존재할때 STL의 map을 사용해 key와 value에 구조체를 넣어 잘 활용할수있다. 이렇게 되면 여러 데이터들을 효율적으로 다룰 수 있는데 여기서 잘 활용을 하기 위해 공부한 내용을 정리하고자 한다.
MAP과 STRUCT의 활용
먼저 MAP안에 핵심임 KEY값에 struct(구조체)를 넣게 된다면 KEY값을 탐색을 할수있게 만들어줘야한다.
이진트리인 MAP에서 KEY 탐색을 위해서는 대소비교가 가능해야하는데.
operator(연산자 오버라이딩)을 사용해서 <, > 기호를 재정의 함으로서 대소비교가 가능하게 할수 있다.
이과정을 통하면 map, set의 key값으로 class, struct를 사용할 수 있다.
struct Info {
unsigned int heigh;
unsigned int weight;
bool operator <(const Info &var) const
{
if( heigh != var.heigh){
return heigh < var.heigh;
}else{
return weight < var.weight;
}
}
};
만약 heigh와 weight를 사용하는 구조체를 key값으로 사용하고 싶다면 heigh를 비교하고 같다면 weight를 비교하는 코드를 생성해주면 오류가 뜨지않고 사용할 수 있다.
<전체 코드>
학생 키와 몸무게를 구조체로 표현한 코드
#include <iostream>
#include <map>
using namespace std;
struct Info {
unsigned int heigh;
unsigned int weight;
//연산자 오버라이딩-----------------------------------------------------------------------
bool operator <(const Info &var) const
{
if( heigh != var.heigh){
return heigh < var.heigh;
}else{
return weight < var.weight;
}
}
};
int main()
{
//민수 구조체 정의------------------------------------------------------------------------
Info minsu;
minsu.heigh=180;
minsu.weight=80;
//수민 구조체 정의------------------------------------------------------------------------
Info sumin;
sumin.heigh=160;
sumin.weight=50;
//map 의 key값을 구조체 Info로 설정-------------------------------------------------------
map<Info,int> student;
//map에 값을 넣는 방법은 두가지로 표현할 수 있다.------------------------------------------
student[minsu]=1;
student.insert(pair<Info,int>(sumin,2));
//map 내부 값 확인-----------------------------------------------------------------------
map<Info,int>::iterator iter;
for (iter = student.begin();iter!=student.end();iter++){
cout << iter->first.heigh<<" "<<iter->first.weight<<" "<<iter->second<<endl;
}
return 0;
}
디버깅 값은 for 문을 처음 돌때 들어가 있는 값을 나타낸 것이다.
'c++ > STL' 카테고리의 다른 글
[STL]MAP(기본 개념 및 예시) (0) | 2021.01.22 |
---|