티스토리 뷰
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);
'개발자이야기' 카테고리의 다른 글
C에서 기존의 C++ 클래스의 함수를 호출해보자 (1) | 2020.01.11 |
---|---|
GCC (C 컴파일러) 설치하기 (0) | 2020.01.04 |