gpt4 book ai didi

c++ - 如何为 C++ 映射创建自己的字符串比较对象

转载 作者:行者123 更新时间:2023-11-28 01:33:13 24 4
gpt4 key购买 nike

我需要一张 key map 来看待'-'作为'1''0' .

例如:

map<string, int>已有元素 <"1-1", 1> .当我使用 map.find("101") , 我应该得到 <"1-1", 1> .

这是我的功能

struct keycompare
{
bool operator()(const std::string& x, const std::string& y)
{
int len = x.length();
for(int i=0;i<len;i++){
if(x[i]==y[i])continue;
else if( x[i]=='-' || y[i]=='-')continue;
else return x[i]<y[i];
}
return false;
}
};

我用map.find()的时候有的时候会出错.有什么好的调试方法吗?

最佳答案

您不能对 std::map 使用这样的比较。

Compare 模板成员的要求之一是等价关系的传递性 !comp(a, b) && !comp(b, a) .您的比较不成立,例如在这种情况下

keycompare comp;

auto equiv = [comp](auto l, auto r) { return !comp(l, r) && !comp(r, l); };

std::string a("111");
std::string b("1-1");
std::string c("101");

std::cout << std::boolalpha << "a == b " << equiv(a, b) << std::endl;
std::cout << std::boolalpha << "b == c " << equiv(b, c) << std::endl;
std::cout << std::boolalpha << "a == c " << equiv(a, c) << std::endl;

具体来说,如果您的 map 同时包含“111”和“101”,应该通过搜索“1-1”找到哪个?

关于c++ - 如何为 C++ 映射创建自己的字符串比较对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50684045/

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