티스토리 뷰

map은 key 와 value로 data를 저장할 수 있다.

map에서의 key 값은 유니크한 값을 가져야하기 때문에 저장되는 값이 key 로 구분될 수 있는 경우에 사용할 수 있다.

유니크한 key 값을 이용하여 data를 찾기 때문에 data 검색이 빠르다.

value 값에는 다양한 data들을 저장할 수 있지만 다른 예제는 많으니 객체를 넣어서 사용하는 예제를 구현해보겠다.

 

먼저 map에 저장할 Student struct를 선언한다.

 

struct Student
{
	enum {
		SEX_MAN,
		SEX_WOMAN,
	};
	char* mName;
	int mSex;
	int mAge;
	char* getName() { return mName; }
	const char* getSex() { return (mSex == SEX_MAN)? "Man" : "Woman"; }
	int getAge() { return mAge; }
};

 

struct 내에 getName() getSex() getAge() 함수를 구현하여 객체의 값을 가져오도록 구현했다.

 

그리고 id 와 Student 객체를 관리할 map을 사용해서 구현을 해본다.

 

char name[10][10] = {
    "Jayson", "Amy", "Peter", "Emily", "John", "Emma",  "Tom", "Anna", "Jake", "Cindy"
};

int main()
{
    std::map<int, Student*> mStudentList;


	for (int i = 0; i < 10; i++) {
		Student* studentData = new Student();
		studentData->mName = name[i];
		if(i % 2 == 0)
			studentData->mSex = Student::SEX_MAN;
		else
			studentData->mSex = Student::SEX_WOMAN;
		studentData->mAge = 10 + i;
		mStudentList.insert(std::pair<int, Student*>((i+1)*101, studentData));
	}
    

	auto it = mStudentList.find(303);

	std::cout << "Student id : 303, name : " << it->second->getName() << 
		", sex : " << it->second->getSex() << ", age : " << 
        it->second->getAge() << std::endl;
    

	it = mStudentList.find(606);

	std::cout << "Student id : 606, name : " << it->second->getName() <<
		", sex : " << it->second->getSex() << ", age : " << 
        it->second->getAge() << std::endl;
}

 

map에 data 추가는 insert 함수로 할 수 있다.

이 때, key 값은 반드시 unique 해야하며 같은 key값이 있는 경우 실행시 error 가 발생한다.

 

map 에 저장된 값은 find(key) 함수로 찾을 수 있는데 위의 구현된 코드와 같이 간단하게 사용한다.

 

auto it = mStudentList.find(303);

 

it 변수로 key 값과 value 값을 모두 접근할 수 있는데, it->first 로 key값에 접근, it->second로 value에 접근할 수 있다.

 

위의 코드에서는 it->second->getName()과 같이 저장된 객체의 함수를 바로 호출해보았다.

 

실행결과 :

실행결과

 

아래와 같이 반복문을 수행하며 map에 저장된 값을 쉽게 가져올 수 있다.

	for (auto it : mStudentList) {
		std::cout << "key : " << it.first << ",	value : " 
        << it.second->getName() << std::endl;
	}

 

 

 

erase() 함수를 사용해서 해당 key값의 data를 제거할 수 있다.

mStudentList.erase(404);

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함