gpt4 book ai didi

带有自定义键的c++ map 插入错误

转载 作者:行者123 更新时间:2023-11-27 23:14:21 24 4
gpt4 key购买 nike

您好,我定义了如下所示的自定义 key 。当我创建一个 std::map 时,我的印象是 map 会引用我的键中定义的运算符==来检测两个键是否相同,但事实并非如此。您能否指出从这张 map 中删除重复项的正确逻辑?

class Key
{
public:
Key(char * init, long l): equipNumber(l)
{
memcpy(initials, init, sizeof(initials));
}

bool operator==(const Key & other) const
{
bool result = true;
cout << "Comparing: " << initials << " with " << other.initials;
result &= (!memcmp(initials, other.initials, sizeof(initials)));
cout << " And result is: " << result << endl;
cout << "Comparing: " << equipNumber << " with " << other.equipNumber << endl;
result &= (equipNumber == other.equipNumber);
return result;
}

bool operator<(const Key & other) const
{
bool result = true;
result &= (equipNumber < other.equipNumber);
return result;
}

private:
char initials[5];
long equipNumber;
};

最佳答案

map电话 operator < (或给定的比较仿函数)两次以确定是否相等:! (a < b) && ! (b < a)暗示a == b .碰巧的是,该对的第一个小于操作已经作为递归下降的一部分执行,因此没有太多(或任何)额外成本。而且它极大地简化了定制。

顺便说一下,

        bool result = true;
result &= (equipNumber < other.equipNumber);
return result;

应该只是return equipNumber < other.equipNumber; .并且涉及类型转换的操作与非成员重载的工作更加一致,因此将二元运算符定义为 friend 是一个好习惯。或在 class {} 之外 block 。

关于带有自定义键的c++ map 插入错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17583450/

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