std::vector, std::list 등의 간단한 데이터 컨테이너나 std::map 같은 1:1 매칭 컨테이너를 사용하면 한 가지 아쉬울 때가 있습니다. 바로 1:Many 매칭 구조에서 자료를 쉽게 사용할 수 없다는 것인데요. 잘 모르는 분은 구현
을 위해서 std::pair 등을 사용하여 구현하기도 합니다만 이 것은 큰 낭비라고 할 수 있죠.
이렇게 작성할 수도 있지만 이 것은 std::pair 에 대한 불필요한 값이 복사되는 cost가 발생함으로 비효율적인 코드가 될 수 있습니다. 그래서 기본적으로 지원하는 Container로써 std::multimap이 존재하죠. 물론 추가적으로 std::map 이 std::hash_map으로 확장되어 비표준 Container로써 지원되듯이 std::multimap 또한 std::hash_multimap 으로 확장되어 비표준으로 지원되긴 합니다. 하지만 간단히 std::multimap을 살펴보면 다음과 같이 사용할 수 있습니다.
다음과 같이 된다면 불필요한 값 뿐만 아니라 loop 에 있어서 모든 부분을 참조하지 않아도 되기 때문에 그 만큼의 비용이 절감된다고 생각할 수 있습니다. 그리고 추가적으로 hash_map, hash_multimap 같은 경우는 비표준이기 때문에 들어있는 namespace가 달라질 수 있습니다. 예를 들면 VS.net 2003 같은 경우 std에, VS.net 2008 같은 경우 stdext 에 들어있죠. 때에 따라 알맞은 Container를 사용하여 cost를 줄이는게 좋을것 같습니다.
"Language / C++" 분류의 다른 글
| std::ostreambuf_iterator, std::istreambuf_iterator의 이유 (1) | 2008/04/16 |
| std::auto_ptr - Smart Pointer 이지만?? (1) | 2008/04/13 |
| iterator_traits - 데이터 타입에 대한 메타사용 (3) | 2008/03/15 |
| 더 이상 rand()는 필요없다?! - boost::random Number Library (2) | 2008/03/12 |
| TR1 Array - boost 라이브러로 사용하는 방법 (1) | 2008/03/12 |

댓글을 달아 주세요