gpt4 book ai didi

c++ - 在 std::set 中使用 operator != 作为 operator < 安全吗?

转载 作者:太空狗 更新时间:2023-10-29 23:22:51 24 4
gpt4 key购买 nike

我有一个包含一些成员的结构,我有一个已实现的运算符==。在 operator== 的帮助下实现 operator< 是否安全?我想在一个集合中使用这个结构,我想检查这个结构是否是唯一的。

struct Data
{
std::string str1;
std::string str2;
std::string str3;
std::string str4;

bool operator==(const Data& rhs)
{
if (str1 == rhs.str1
&& str2 == rhs.str2
&& str3 == rhs.str3
&& str4 == rhs.str4
)
return true;
else
return false;
}

// Is this ok??
bool operator<(const Data& rhs)
{
return !this->operator==(rhs);
}
}

那么当我将这个结构插入到 std::set 时会发生什么?

最佳答案

不,这很不安全。实现它的最简单方法是通过 std::tie

#include <tuple>
struct Data
{
std::string str1;
std::string str2;
std::string str3;
std::string str4;

bool operator<(const Data& rhs) const // you forgot a const
{
return
std::tie(str1, str2, str3, str4) <
std::tie(rhs.str1, rhs.str2, rhs.str3, rhs.str4);
}
}

关于c++ - 在 std::set 中使用 operator != 作为 operator < 安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12782225/

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