블로그는 나의 힘!
[ 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 );
}

 

////////////////////////////////////////// 검색 ///////////////////////////////////////////////////

// ********** [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 );
}

  int mapDataSize = mapData.Count(3);     // index code 3 size 

 

////////////////////////////////////////// 수정 ///////////////////////////////////////////////////

// ********** [Map] **********
 mitFind->second = 250;         // 수정. 해당 Key 위치의 Value 값 수정.
 mitFind = mapData.find( 2 );   // 검색

 // 없다면
 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 );
}
 
////////////////////////////////////////// 삭제 ///////////////////////////////////////////////////

// ********** [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 값의 중복된 첫번째 데이터 삭제

 

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 전체 삭제

 

 

Posted by Mister_Q