gpt4 book ai didi

c++ - set::find() 没有找到

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:46:46 25 4
gpt4 key购买 nike

这段代码有问题(cubeBoxData是一组cubeBox):

cubeBox temp(bx,by,bz);
cubeBoxData.insert(temp);
set<cubeBox>::iterator i = cubeBoxData.find(temp);
const_cast<cubeBox&>(*i).addCube(x,y,z);

问题是 cubeBoxData.find(temp);没有找到 temp,然后程序尝试调用 addCube() 失败,我不知道为什么,因为这段代码工作正常(只需更改第三行):

cubeBox temp(bx,by,bz);
cubeBoxData.insert(temp);
set<cubeBox>::iterator i = find(cubeBoxData.begin(),cubeBoxData.end(),temp);
const_cast<cubeBox&>(*i).addCube(x,y,z);

cubeBox 的运算符 < 是:

bool operator<(const cubeBox& c) const {
return x<c.x ? true : y<c.y ? true : z<c.z ? true : false;
}

并且 addCube 不会改变 x、y 或 z。

我认为我的运算符(operator)<错了,我漏掉了一些愚蠢的东西,但我想不通那是什么。

最佳答案

operator<您所定义的不会建立 strict weak ordering .例如,根据您的比较器,这两种情况都是 {1,0,1} < {0,1,0}{0,1,0} < {1,0,1} .结果,set 上的所有操作有未定义的行为。

您应该重写您的比较操作,以便它确实建立严格的弱排序。最简单(?)的方法是使用 std::tuple :

bool operator<(const cubeBox& c) const {
return std::tie(x,y,z) < std::tie(c.x,c.y,c.z);
}

关于c++ - set::find() 没有找到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14288825/

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