c++ - 带有键的 std::map 作为具有三个 int 成员的结构
问题描述
我想使用具有三个整数成员的结构作为键。如何重载 < 运算符。我知道对于两个成员,它可能会被重载为:
bool operator < (const CacheKey& a, const CacheKey& b) {
return a.x < b.x || (a.x == b.x && a.y < b.y);
}
解决方案
通用解决方案是:
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;
推荐阅读
- java - 在 JFrame 中显示外部文件内容的问题
- java - 是否可以在 Java 中构造一个允许 flatMap 返回不同的 Left 值的 Either?
- c - sh: 1: /my_path/ompi-1.1/compiler/ompi: 运行 C 程序时权限被拒绝
- python - ValueError: as_list() 未在未知的 TensorShape 上定义
- python - Python 3:资源警告:未关闭的文件 <_io.TextIOWrapper name='PATH_OF_FILE'
- css - 将输入类型日期更改为图标
- java - Android Keystore - 无效密钥异常 - 首选提供者不支持密钥(仅在模拟器上)
- multithreading - 如何使用 RxJava 让多个线程按顺序运行
- postgresql - statdard包中的非标准导入github.com/lib/pq
- android - 在改造中发布 JsonArray 时,会在 json 中自动添加一些 okhttp 内容