首页 > 解决方案 > 带有键的 std::map 作为具有三个 int 成员的结构

问题描述

我想使用具有三个整数成员的结构作为键。如何重载 < 运算符。我知道对于两个成员,它可能会被重载为:

bool operator < (const CacheKey& a, const CacheKey& b) {
    return a.x < b.x || (a.x == b.x && a.y < b.y);
}

标签: c++stl

解决方案


通用解决方案是:

if (a.x != b.x) return a.x < b.x;
if (a.y != b.y) return a.y < b.y;
// ...
return false;

或者:

return std::tie(a.x, a.y) < std::tie(b.x, b.y);

(在这种情况下,您可能希望创建一个返回绑定成员的成员函数,以便能够a.tie() < b.tie()为所有需要的运算符执行类似的操作。)

或者,在 C++20 中,您可以在类中添加以下内容以自动获取所有比较运算符,包括<

auto operator<=>(const CacheKey &) const = default;

推荐阅读