次のコードセグメントに示すように、Cスタイルの文字列でインデックス付けされたマルチマップを作成しようとしています。
#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の行のみがスペースで区切られます)。
私はこれでどこが間違っているのですか?
ありがとう