다음 코드 세그먼트와 같이 I는, C 스타일 문자열 색인 multimap은을 만들려고 오전 :과 multimap은 항목을 삽입하지
#include <cstring>
#include <map>
#include <iostream>
using namespace std;
int main(void)
{
int i, j;
int (*fn_pt)(const char *, const char *) = strcmp;
multimap<char *, char *, int (*)(const char *, const char *)>a(fn_pt);
for (i = 0; i < 2; i++)
{
char key[2];
sprintf(key, "%d", i);
for (j = 0; j< 5; j++)
{
char value[2];
sprintf(value, "%d", j);
a.insert(pair<char *, char *>(key, value));
}
}
for (i = 0; i < 2; i++)
{
char key[2];
sprintf(key, "%d", i);
multimap<char *, char *>::iterator it = a.find(key);
while (it != a.end())
{
cout << it->first << "\t" << it->second <<endl;
it++;
}
}
}
는 단순히의 키를 변경 위의 프로그램을 정수로 변환하면 예상 한 결과가 나옵니다. 그러나 문자열에서 멀티 맵을 인덱싱하면 사용 된 모든 키 값에 대해 모든 값을 표시하지 않고 예기치 않은 (1과 4의 행만 공백으로 구분 된) 예기치 않은 것을 제공합니다.
어디서 잘못 되었나요?
감사
왜'std :: string'을 사용하지 않겠습니까? 표준 C++ 컨테이너에서 'const char *'키와 값을 올바르게 사용하는 것은 어렵다. – kennytm
@KennyTM std :: string을 사용하여 작동하는지 확인합니다. 하지만 나는 C 스타일의 문자열이 너무 작동해야한다고 생각합니다. 특히 비교기에 명시 적으로 지정했기 때문에 더욱 그렇습니다. – Arani