gpt4 book ai didi

c++ - C 风格字符串键上的 multimap 无法插入条目

转载 作者:太空狗 更新时间:2023-10-29 23:53:04 25 4
gpt4 key购买 nike

我正在尝试创建一个以 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 的行由空格分隔),而不是显示我使用的每个键值的每个值。

我哪里出错了?

谢谢

最佳答案

strcmp 是在 multimap 中使用的错误谓词。谓词应满足以下条件:

The expression comp(a,b), where comp is an object of this comparison class and a and b are key values, shall return true if a is to be placed at an earlier position than b in a strict weak ordering operation.

strcmp 违反了这一点,因为如果字符串不相等(a < b 或 a > b),它会返回一个非零值。

您应该定义自己的谓词,它返回 true当且仅当第一个字符串小于第二个字符串时。

关于c++ - C 风格字符串键上的 multimap 无法插入条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12689981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com