예를들면, (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/11/14 09:13 고유주소 고치기 답하기
좋은 포스팅 감사.
우균 2012/12/11 17:39 고유주소 고치기 답하기
앗 문규형이시다 ㅋㅋ