STL MAP에서 value 부분에 다른 map을 넣는 방법 좀 알려주세요....

sulsj의 이미지

안녕하세요
다음과 같이 해볼려고 하는데요...

typedef multimap<string, string> mmap_major_name;
typedef map<string, multimap<string, string> > map_student;

먼저 mmap_major_name에 insertion을 하고 다시 map_student에 insert하려는데
잘 안되네요...
원래 문법상 오류이면 compile error가 날텐데 그렇지도 않고....
컴파일은 되는데 segmentation error가...쩝...

고수님들 도움 말씀을 부탁드립니다.

에고..정보가 넘 없었나요? 지송...^^

mmap_major_name G7, G8, U4;
map_student student;
 
...
 
while(getline(f_in,r,'\n')) {
      if (r.substr(25,2) == "G7")
        G7.insert(pair<string, string>(r.substr(31,4), r.substr(0,22)));
      else if (r.substr(25,2) == "G8")
        G8.insert(pair<string, string>(r.substr(31,4), r.substr(0,22)));
      else
        U4.insert(pair<string, string>(r.substr(31,4), r.substr(0,22)));
}
 
...
 
student.insert(pair<string, multimap<string, string> >(r.substr(25,2), G7));
    student.insert(pair<string, multimap<string, string> >(r.substr(25,2), G8));
    student.insert(pair<string, multimap<string, string> >(r.substr(25,2), U4));

이렇게 하면 안되는건가요?
음냐...

그럼 다시 부탁드립니다.

doldori의 이미지

도움을 드리고 싶어도 정보가 너무 부족해요.
소스를 보여주세요.

doldori의 이미지

map의 문제가 아니군요.
getline()은 인수로 전달받은 스트링을 지우고 입력을 시작합니다.
즉 while을 빠져나온 후에는 r의 내용은 아무 것도 없는 거죠.
substr(25, 2)을 하려면 string의 길이가 최소한 25는 되어야 하는데
빈 스트링이니 오동작하는 겁니다.

student.insert(pair<string, multimap<string, string> >("G7", G7));

이런 식으로 하면 되긴 합니다.

그건 그렇고 이 코드는 비효율적인 부분이 많군요. substr()을 반복해서
쓴다든지 map을 통째로 복사해서 insert 한다든지 하는 것들이죠.
조금만 신경쓰면 훨씬 효율적으로 할 수 있습니다.

sulsj의 이미지

답변 감사드립니다. ^^