2012-12-04 2 views
0

나는 multimap은이multimap은 중복 키를 제거

bird  - air, earth 
fish  - water 
lion  - earth, water 

다른 방법으로 중복 키를 제거하는 방법은 무엇입니까? 나는 키 XXX에 associeted 값을 인쇄하지만 한 번에 요소를 인쇄이 방법

int size_mmap = namesMultiMap1.size(); 
pair<multimap<string,string>::iterator,multimap<string,string>::iterator> ret; 

for (int i = 0; i < 1; i++){ 

    cout << " xxx "<< " =>"; 
    ret = namesMultiMap1.equal_range("xxx"); 

    for (nameItr1=ret.first; nameItr1!=ret.second; ++nameItr1) 
    cout << " " << (*nameItr1).second; 

}

:

나는 이런 짓을. 모든 키와 값을 인쇄하고 싶습니다. 지도가 크기 때문에 자동화가 필요합니다. namesMultiMap1에 대한 반복기를 사용하여 반복하는 경우 반복 키를 인쇄하십시오.

+0

내 생각 엔 등호 키를 비교, 처음으로>는 my.map-에 반복, 같은 키의 세트의 세트의 값을 넣어했다. 그러나 지금은 이것이 작동하지 않았습니다. – user1871217

+0

코드를 보여주십시오. 우리는 틀린 것을 보게 될 것입니다. – piokuc

+0

편집 코드를 맨 위에주십시오. – user1871217

답변

1

좋아, 이것은 다음과 같이 행해질 수있다. 결과의 유형이 multimap < string, set<string> >이 아닌 map<string, set<string> >이고 중복 된 키를 원하지 않으므로, map이 더 적합합니다.

#include <map> 
#include <set> 
#include <string> 
#include <iostream> 
#include <iterator> 

using namespace std; 

typedef multimap<string,string> mm; 
typedef map<string, set<string> > ms; 

ms convert(const mm& m) 
{ 
    ms r; 

    for (mm::const_iterator it = m.begin(); it != m.end(); ++it) 
    { 
     set<string>& s(r[it->first]); 
     s.insert(it->second); 
    } 

    return r; 
} 


int main() 
{ 
    mm m; 
    m.insert(make_pair("john", "kowalski")); 
    m.insert(make_pair("john", "smiths")); 
    m.insert(make_pair("mary", "doe")); 
    m.insert(make_pair("mary", "walker")); 

    ms s(convert(m)); 

    for (ms::iterator it = s.begin(); it != s.end(); ++it) 
    { 
     cout << it->first << ": "; 
     set<string> &st(it->second); 
     copy(st.begin(), st.end(), ostream_iterator<string>(cout, ", ")); 
     cout << endl; 
    } 
    return 0; 
} 

이 인쇄됩니다 :

john: kowalski, smiths, 
mary: doe, walker, 
+0

도움에 감사드립니다. 좋은 하루 되세요. – user1871217

+0

당신은 오신 것을 환영합니다. 물론 문제를 해결하는 경우에만 질문을 마무리 할 수 ​​있으면 감사하겠습니다. – piokuc

+1

@ user1871217 당신이 대답을 좋아한다면 왜 그것을 upvote하지 않아? – Rapptz