我想創建索引的C風格的字符串多重映射,如下面的代碼段:多重映射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++;
}
}
}
簡單地改變的關鍵上面的程序到整數給我預期的結果。但是,對一個字符串索引multimap會給我一些意想不到的結果(只有1和4的行按空格分隔),而不是顯示每個使用的鍵值的每個值。
我在哪裏錯了?
感謝
爲什麼不使用'std :: string'?很難在標準的C++容器中正確使用'const char *'鍵和值。 – kennytm
@KennyTM我會嘗試使用std :: string並查看它是否有效。但我認爲C風格的字符串應該也能工作,特別是因爲我已經明確地給出了比較器 – Arani