gpt4 book ai didi

C++ 为 vector 设置 keyCompare 函数

转载 作者:行者123 更新时间:2023-11-28 00:13:51 25 4
gpt4 key购买 nike

我将 glm::ivec3 key 存储在一个集合中。由于此类型缺少 keyCompare 函数,因此我在结构中定义了它。如果我只有两个数字 a,b 我可以简单地写 a < b;但是我怎么能为 vector 做呢?

我尝试了以下方法:

struct KeyCompare
{
bool operator()(const glm::ivec3& a, const glm::ivec3& b)const
{
return a.x < b.x && a.y < b.y && a.z < b.z;
}
};

typedef set<glm::ivec3, KeyCompare> ChunkSet;

现在我可以插入值了,但是当检查一个值是否存在时它返回 true 而没有插入这个键。

你知道 vector 是如何比较的吗?

提前致谢!

最佳答案

比较器必须实现 strict weak ordering .你的没有。一种简单的实现方法是使用 std::tie :

#include <tuple>
struct KeyCompare
{
bool operator()(const glm::ivec3& a, const glm::ivec3& b)const
{
return std::tie(a.x, a.y, a.z) < std::tie(b.x, b.y, b.z);
}
};

这会执行 x、y 和 z 的字典顺序比较。

关于C++ 为 vector 设置 keyCompare 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31587450/

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