반응형
map에 iterator를 통한 데이터 추가 하는 방법
int main()
{
std::map<int, int = ""> mData;
int nId = 0;
int nData = 10;
for (int i = 0; i < 5; i++)
{
mData.insert(std::map<int, int = "">::value_type(nId, nData));
nId += 2;
nData += 2;
}
std::map<int, int = "">::iterator iter = mData.find(5);
if (iter == mData.end())
{
mData.insert(iter, std::map<int, int = "">::value_type(5, 15));
// mData.insert(std::map<int, int="">::value_type(5, 15));
}
else
{
printf("존재 \n");
}
iter = mData.begin();
while (iter != mData.end())
{
printf("id : %d, data : %d \n", iter->first, iter->second);
iter++;
}
return 0;
}
14행에서 find(5)를 통해 key가 5인 데이터를 찾고 그 iterator를 반환하는데, 그 값을 iter변수에 저장한다.
위 코드에서는 key가 5인 데이터가 없기 때문에 key값 5를 가지는 데이터가 들어갈 위치(nullptr)를 반환한다.
그리고 17행에서 "mData.insert(iter, std::map<int, int>::value_type(5, 15));"를 통해 key 값이 5이고 value가 15인 데이터를 추가하고 있다.
첫 번째 인자로 삽입될 위치의 iterator값을 주어 map을 처음부터 참조하여 들어갈 위치를 찾아가지 않고 추가할 수 있다.
18행의 주석 친 "mData.insert(std::map<int, int>::value_type(5, 15));"를 통해 추가하면 map의 처음부터 참조하여 key 값이 5인 데이터가 들어갈 위치를 찾고 추가하게 된다.
반응형
'C++ STL' 카테고리의 다른 글
[C++ STL] vector (0) | 2018.03.18 |
---|