key 값에 따라서 데이터를 그룹으로 묶어야 하는 경우가 종종 발생합니다.

예를들면, (1, "test1"), (1, "test2"), (2, "test3"), (2, "test4")
1번 그룹에 ["test1", "test2"]
2번 그룹에 ["test3", "test4"]
이런식으로 동일한 키 값에 따라 데이터를 분리해야 할 경우에

std::multimap을 컨테이너 특성을 활용하면 다음과 같이 편리하게 그룹으로 묶을 수 있습니다.
upper_bound(키 값)을 넣으면 다음 키 값의 첫번째 iterator를 반환하게 됩니다.

typedef std::multimap< int, string > MapContainer;
MapContainer mapContainer;

mapContainer.insert( std::make_pair( 1, "test1" ) );
mapContainer.insert( std::make_pair( 1, "test2" ) );
mapContainer.insert( std::make_pair( 2, "test3" ) );
mapContainer.insert( std::make_pair( 2, "test4" ) );
mapContainer.insert( std::make_pair( 3, "test5" ) );
mapContainer.insert( std::make_pair( 3, "test6" ) );
mapContainer.insert( std::make_pair( 3, "test7" ) );

typedef std::vector< string > VecString;
VecString vecStrings;

for( MapContainer::const_iterator it = mapContainer.begin();
     it != mapContainer.end();
     it = mapContainer.upper_bound((*it).first))
{
    MapContainer::_Paircc it_pair = mapContainer.equal_range((*it).first);

    std::for_each( it_pair.first, it_pair.second,
        [](const MapContainer::value_type& elem)
    {
        vecStrings.push_back(elem);
    }

    SendOtherClient(vecStrings);
    vecStrings.clear();
}
2012/10/30 00:57 2012/10/30 00:57

덧글을 달아 주세요

  1. 문규 2012/11/14 09:13 고유주소 고치기 답하기

    좋은 포스팅 감사.

  2. 우균 2012/12/11 17:39 고유주소 고치기 답하기

    앗 문규형이시다 ㅋㅋ