gpt4 book ai didi

C++ std::set 查找函数重载 == 运算符

转载 作者:可可西里 更新时间:2023-11-01 17:35:39 24 4
gpt4 key购买 nike

我正在使用集合。我使用自定义结构作为键。我正在插入一个值并试图找到插入的值。但它似乎永远找不到元素。

我已经覆盖了 == 运算符和 < 运算符。

结构代码如下:

struct distance_t
{
public:
int id;
double distance;

bool operator<(const distance_t& rhs) const
{
if(distance < rhs.distance)
return true;
else
return false;
}

bool operator==( const distance_t& rhs)
{
if(id == rhs.id)
return true;
else
return false;
}
};

这是main的代码

int main()
{
set<distance_t> currentSet;

distance_t insertDistance;
insertDistance.id =1;
insertDistance.distance = 0.5;

currentSet.insert(insertDistance);

distance_t findDistance;
findDistance.id = 1;

assert(currentSet.find(findDistance) != currentSet.end());
}

它总是在断言语句中失败。我做错了什么?

编辑 - 好的,现在我明白它根本不使用 == 运算符。这就是我想要的。我需要按距离排序的数据结构。但我应该能够使用 id 将其删除。是否有任何干净的方法或已经存在的数据结构来执行此操作?

最佳答案

它失败了,因为你的小于比较使用了 distance_t::distance ,您未在 findDistance 中设置:

distance_t findDistance;
findDistance.id = 1;

std::set不使用 operator==为了任何东西。它只使用 operator< .所以你必须改变它的逻辑来使用 distance_t::id .

如果您想按 id 搜索在不更改集合顺序的情况下,您可以使用 std::find :

set<distance_t>::iterator it = std::find(currentSet.begin(), 
currentSet.end(),
findDistance);

这将使用您的 operator== .请记住,这具有线性时间复杂度。

关于C++ std::set 查找函数重载 == 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12086957/

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