블로그는 귀차니즘

First Sensation
  • 공지
  • 지역로그
  • 태그
  • 방명록

Multimap - 때로는 유용한 컨테이너

Language 2008/03/07 20:30 귀차니스트
  std::vector, std::list 등의 간단한 데이터 컨테이너나 std::map 같은 1:1 매칭 컨테이너를 사용하면 한 가지 아쉬울 때가 있습니다. 바로 1:Many 매칭 구조에서 자료를 쉽게 사용할 수 없다는 것인데요. 잘 모르는 분은 구현
을 위해서 std::pair 등을 사용하여 구현하기도 합니다만 이 것은 큰 낭비라고 할 수 있죠.

vectorPair.cpp (Language : cpp)
  1. #include <vector>
  2.  
  3. int main( int argc, char **argv )
  4. {
  5.     std::vector< std::pair< int, double > > Abc;
  6.     Abc.push_back( std::make_pair( 1, 1.1 ) );
  7.     Abc.push_back( std::make_pair( 1, 2.1 ) );
  8.     Abc.push_back( std::make_pair( 1, 3.1 ) );
  9.     Abc.push_back( std::make_pair( 2, 4.1 ) );
  10.     Abc.push_back( std::make_pair( 4, 5.1 ) );
  11.  
  12.     for( std::vector< std::pair< int, double > >::const_iterator Iter = Abc.begin(); Iter != Abc.end(); ++Iter ){
  13.        
  14.         std::pair< int ,double > Data = *Iter;
  15.         // Data.fisrt 가 같을 경우 처리..
  16.     }
  17.  
  18.     return 0;
  19. }

  이렇게 작성할 수도 있지만 이 것은 std::pair 에 대한 불필요한 값이 복사되는 cost가 발생함으로 비효율적인 코드가 될 수 있습니다. 그래서 기본적으로 지원하는 Container로써 std::multimap이 존재하죠. 물론 추가적으로 std::map 이 std::hash_map으로 확장되어 비표준 Container로써 지원되듯이 std::multimap 또한 std::hash_multimap 으로 확장되어 비표준으로 지원되긴 합니다. 하지만 간단히 std::multimap을 살펴보면 다음과 같이 사용할 수 있습니다.

multimap.cpp (Language : cpp)
  1. #include <map>
  2.  
  3. int main( int argc, char **argv )
  4. {
  5.     std::multimap< int, double > Abc;
  6.     Abc.insert( std::make_pair( 1, 2.1 ) );
  7.     Abc.insert( std::make_pair( 1, 2.1 ) );
  8.     Abc.insert( std::make_pair( 1, 3.1 ) );
  9.     Abc.insert( std::make_pair( 2, 4.1 ) );
  10.     Abc.insert( std::make_pair( 4, 5.1 ) );
  11.  
  12.     std::multimap< int, double >::const_iterator StartIter  = Abc.lower_bound( 1 );
  13.     std::multimap< int, double >::const_iterator EndIter    = Abc.upper_bound( 1 );
  14.    
  15.     while( StartIter != EndIter )   {
  16.        
  17.         // StartIter->first 가 같은것에 대한 second 값 처리
  18.     }
  19.  
  20.     return 0;
  21. }

  다음과 같이 된다면 불필요한 값 뿐만 아니라 loop 에 있어서 모든 부분을 참조하지 않아도 되기 때문에 그 만큼의 비용이 절감된다고 생각할 수 있습니다. 그리고 추가적으로 hash_map, hash_multimap 같은 경우는 비표준이기 때문에 들어있는 namespace가 달라질 수 있습니다. 예를 들면 VS.net 2003 같은 경우 std에, VS.net 2008 같은 경우 stdext 에 들어있죠. 때에 따라 알맞은 Container를 사용하여 cost를 줄이는게 좋을것 같습니다.
크리에이티브 커먼즈 라이센스
Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

"Language" 분류의 다른 글

boost::spirit - Parser 라이브러리 (0)2008/04/23
std::ostreambuf_iterator, std::istreambuf_iterator의 이유 (1)2008/04/16
std::auto_ptr - Smart Pointer 이지만?? (1)2008/04/13
C# Application - Main 에서 Try-Catch 오작동 해결하는 방법 (7)2008/04/07
Boost 1.35 - 워크샵 뒤의 포스팅 (2)2008/04/03
2008/03/07 20:30 2008/03/07 20:30
TAG multimap, STL, 멀티맵
받은 트랙백이 없고, 댓글이 없습니다.

트랙백 주소 :: http://www.filewiki.net/tc/trackback/27

댓글을 달아 주세요

◀ 이전페이지 1 다음페이지 ▶

블로그 이미지
First Sensation 귀차니스트
rss
  • 관리자
  • 글쓰기

카테고리

  • 전체 (119)
    • Computer (3)
    • Language (14)
    • Reverse Engineering (1)
    • Algorithm (10)
    • TopCoder (3)
    • Library (2)
    • Programming (21)
    • Programming Tip (9)
    • PSP-Programming (10)
    • Program (5)
    • Small Talk (33)
    • Document (4)
    • OS Develope (4)

최근에 올라온 글

  • Dovelet - (1).
  • Script Interpreter - b....
  • VirtualHttpServer - 가.... (2)
  • 음.. 여러가지 일이 있.... (2)
  • 어후.. 드디어 인터럽트....

최근에 달린 댓글

  • 좋은정보 감사합니다. :). 블루아사 03:05
  • 헠 ㅋ 다음에도 들러주세용 ㅋㅋ. 귀차니스트 03/09
  • ㅎㅎ RSS로 첨 온 글이네.ㅋ. 당구리 02/22
  • 음.. 한글화 파일 0.5 버젼은.... 귀차니스트 02/22
  • 관리자만 볼 수 있는 댓글입.... 비밀방문자 01/30

달력

«   2010/03   »
일 월 화 수 목 금 토
  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      

링크

  • kkamagui 프로그래밍 세상.
  • runner님의 이글루.
  • 당구리의 마굿간.
  • 동우fly.
  • 류광의 번역 이야기.
  • 서광열의 프로그래밍 언....
  • 준호씨의 블로그.
  • 최익필의 이름없는 블로그.
  • 위키는 귀차니즘.

최근에 받은 트랙백

  • 한게임 테트리스 인공지.... 고니's Life 2009
  • ACM 706 (Uva ID) : LCD.... 알고리즘 트레이닝 : Oh... 2009
  • 문제 4 : LCD 디스플레.... 최익필의 이름없는 블로그 2009
  • 궁극의 예외처리. 이름없는 블로그 2008
  • Maximum sum. 티스토리 지점 2008

글 보관함

  • 2010/03 (2)
  • 2010/02 (1)
  • 2010/01 (1)
  • 2009/12 (3)
  • 2009/08 (1)

태그목록

  • Array
  • Develope
  • Bootloader
  • C++
  • interface design guide
  • Textcube
  • Freetype2
  • 한글
  • dovelet
  • 재귀적합성
  • .Net
  • 알고리즘 트레이닝
  • 뻘글
  • ++i
  • 홈브류
  • High Precision Event Timer
  • 팡야계산기
  • GDI
  • HTML
  • 십자매
  • Linux
  • QT4
  • 1.35
  • Timer
  • boost::array
  • 64bit
  • Library
  • 분양
  • TopCoder
  • boost::Tokenizer

지역로그 : 태그 : 방명록 : 관리자 : 글쓰기
귀차니스트’s Blog is powered by Textcube 1.7.5 : Risoluto / Designed by DesignNia.net