[ Map & MultiMap 삽입, 검색, 삭제 ]
#include <map>
////////////////////////////////////////// 생성 ///////////////////////////////////////////////////
std::map< int, int > mapData; // Map 생성
std::multimap< int, int > mulitmapData; // MultiMap 생성
////////////////////////////////////////// 삽입 ///////////////////////////////////////////////////
mapData.insert( std::make_pair( 1, 100 ) ); // Map 삽입 ( Key, Value )
mapData.insert( std::make_pair( 2, 200 ) );
mapData.insert( std::make_pair( 3, 300 ) );
mapData[4] = 400;
mapData[5] = 500;
mapData[6] = 600;
mulitmapData.insert( std::make_pair( 1, 100 ) ); // MultiMap 삽입 ( Key, Value )
mulitmapData.insert( std::make_pair( 2, 200 ) );
mulitmapData.insert( std::make_pair( 3, 300 ) );
mulitmapData.insert( std::make_pair( 3, 400 ) );
mulitmapData.insert( std::make_pair( 3, 500 ) );
////////////////////////////////////////// 출력 ///////////////////////////////////////////////////
// ********** [Map] **********
// 전체 출력
for( std::map< int, int >::iterator iter = mapData.begin(); iter != mapData.end(); ++iter )
{
printf( " mapData[%d] = %d \n", iter->first, iter->second );
//printf( " mapData[%d] = %d \n", (*iter).first, (*iter).second );
}
printf( " mapData[%d] = %d \n", 1, mapData[1] ); // Key 값 안다면
// ********** [MultiMap] **********
// 전체 출력
for( std::multimap< int, int >::iterator iter = multimapData.begin(); ; iter != multimapData.end(); ; ++iter )
{
printf( " multimapData[%d] = %d \n", iter->first, iter->second );
}
mapData.insert( std::make_pair( 2, 200 ) );
mapData.insert( std::make_pair( 3, 300 ) );
mapData[4] = 400;
mapData[5] = 500;
mapData[6] = 600;
mulitmapData.insert( std::make_pair( 1, 100 ) ); // MultiMap 삽입 ( Key, Value )
mulitmapData.insert( std::make_pair( 2, 200 ) );
mulitmapData.insert( std::make_pair( 3, 300 ) );
mulitmapData.insert( std::make_pair( 3, 400 ) );
mulitmapData.insert( std::make_pair( 3, 500 ) );
////////////////////////////////////////// 출력 ///////////////////////////////////////////////////
// ********** [Map] **********
// 전체 출력
for( std::map< int, int >::iterator iter = mapData.begin(); iter != mapData.end(); ++iter )
{
printf( " mapData[%d] = %d \n", iter->first, iter->second );
//printf( " mapData[%d] = %d \n", (*iter).first, (*iter).second );
}
printf( " mapData[%d] = %d \n", 1, mapData[1] ); // Key 값 안다면
// ********** [MultiMap] **********
// 전체 출력
for( std::multimap< int, int >::iterator iter = multimapData.begin(); ; iter != multimapData.end(); ; ++iter )
{
printf( " multimapData[%d] = %d \n", iter->first, iter->second );
}
////////////////////////////////////////// 검색 ///////////////////////////////////////////////////
// ********** [Map search] **********
// 검색 ( Key ) key 값으로 검색해 없다면 end() 값 반환
std::map< int, int >::iterator mitFind = NULL;
mitFind = mapData.find( 3 );
if( mapData.end() == mitFind ) printf( "Test1 : End \n" );
else printf( "Test1 : Map Key ( %d ), Map Value ( %d ) \n", mitFind->first, mitFind->second );
// ********** [MultiMap search] **********
std::pair< std::map< int, int >::iterator, std::map< int, int >::iterator > iter_pair;
iter_pair = mulitmapData.equal_range( 3 ); // index code 3 data information find
for( std::multimap< int, int >::iterator iter = iter_pair.first; iter != iter_pair.second; ++iter )
{
printf( " multimapData[%d] = %d \n", iter->first, iter->second );
}
for( std::multimap< int, int >::iterator iter = iter_pair.first; iter != iter_pair.second; ++iter )
{
printf( " multimapData[%d] = %d \n", iter->first, iter->second );
}
int mapDataSize = mapData.Count(3); // index code 3 size
////////////////////////////////////////// 수정 ///////////////////////////////////////////////////
// ********** [Map] **********
mitFind->second = 250; // 수정. 해당 Key 위치의 Value 값 수정.
mitFind = mapData.find( 2 ); // 검색
mitFind = mapData.find( 2 ); // 검색
// 없다면
if( mapData.end() == mitFind )
printf( "Test1 : End \n" );
else
if( mapData.end() == mitFind )
printf( "Test1 : End \n" );
else
// first = Key, second = Value
printf( "Test1 : Map Key ( %d ), Map Value ( %d ) \n", mitFind->first, mitFind->second );
// ********** [MultiMap] **********
int data = 500;
for( std::multimap< int, int >::iterator iter = iter_pair.first; iter != iter_pair.second; ++iter )
{
iter->second = data++;
printf( " multimapData[%d] = %d \n", iter->first, iter->second );
}
printf( "Test1 : Map Key ( %d ), Map Value ( %d ) \n", mitFind->first, mitFind->second );
// ********** [MultiMap] **********
int data = 500;
for( std::multimap< int, int >::iterator iter = iter_pair.first; iter != iter_pair.second; ++iter )
{
iter->second = data++;
printf( " multimapData[%d] = %d \n", iter->first, iter->second );
}
////////////////////////////////////////// 삭제 ///////////////////////////////////////////////////
// ********** [Map] **********
mapData.erase( mapData.find( 2 ) ); // 삭제 ( Key ) Key 값 위치 삭제
mitFind = mapData.find( 2 ); // 검색
if( mapData.end() == mitFind ) // 없다면
printf( "Test2 : End \n" );
else
printf( "Test2 : Map Key ( %d ), Map Value ( %d ) \n", mitFind->first, mitFind->second );
// ********** [MultiMap] **********
std::multimap< int, int >::iterator iter = iter_pair.first;
multimapData.erase( iter->first ); // 삭제 ( Key ) Key 값 위치 삭제
multimapData.erase( multimapData.find(iter->first) ); // 삭제 ( Key ) Key 값의 중복된 첫번째 데이터 삭제
printf( "Test2 : End \n" );
else
printf( "Test2 : Map Key ( %d ), Map Value ( %d ) \n", mitFind->first, mitFind->second );
// ********** [MultiMap] **********
std::multimap< int, int >::iterator iter = iter_pair.first;
multimapData.erase( iter->first ); // 삭제 ( Key ) Key 값 위치 삭제
multimapData.erase( multimapData.find(iter->first) ); // 삭제 ( Key ) Key 값의 중복된 첫번째 데이터 삭제
iter_pair = mulitmapData.equal_range( 3 ); // index code 3 data information find
for( std::multimap< int, int >::iterator iter = iter_pair.first; iter != iter_pair.second; ++iter )
{
if( 400 == iter->second )
multimapData.erase( iter ); // 삭제 index key 3 이고 400인 데이터 삭제
}
//////////////////////////////////////// 전체 삭제 /////////////////////////////////////////////
mapData.clear(); // Map 전체 삭제
multimapData.clear(); // MultiMap 전체 삭제
multimapData.clear(); // MultiMap 전체 삭제
'[ Programing ] > STL & Booster' 카테고리의 다른 글
[STL] Set, MultiSet (0) | 2010.08.06 |
---|---|
[STL] Binary search ( qsort, bsearch ) (0) | 2010.06.29 |
[STL] sort( vecStock.begin(), vecStock.end(), SortCredit ); 정렬 (0) | 2010.01.31 |
[STL] List 기타 간단 기능 (0) | 2009.12.24 |
[STL] List 원하는 위치의 데이터 삭제 (0) | 2009.12.24 |