【c++】解决使用 std::map 时报错 no match for ‘operator<’

文章目录

    • [1. 发现问题](#1. 发现问题)
    • [2. GPT 分析问题](#2. GPT 分析问题)
    • [3. 解决问题](#3. 解决问题)

1. 发现问题

c++ 代码中使用复杂类型 std::map<Eigen::Vector2i, std::set<long unsigned int>> 时报错 no match for 'operator<' (operand types are 'const Eigen::Matrix<int, 2, 1>' and 'const Eigen::Matrix<int, 2, 1>')

2. GPT 分析问题

这个错误是由于 std::map 默认使用 < 操作符进行比较键值,但是 Eigen::Vector2i 类型没有定义 < 操作符,因此导致编译错误。

为了在 std::map 中使用 Eigen::Vector2i 作为键类型,你需要提供一个比较函数或者自定义比较方式。你可以通过定义一个比较函数或者自定义比较对象来解决这个问题。

3. 解决问题

cpp 复制代码
std::map<Eigen::Vector2i, std::set<long unsigned int>> grids;

修改为

cpp 复制代码
struct Vector2iCompare {
    bool operator()(const Eigen::Vector2i& lhs, const Eigen::Vector2i& rhs) const {
        if (lhs.x() != rhs.x())
            return lhs.x() < rhs.x();
        return lhs.y() < rhs.y();
    }
};

// 使用自定义比较函数作为 std::map 的比较方式
std::map<Eigen::Vector2i, std::set<long unsigned int>, Vector2iCompare> grids;
相关推荐
freedom_1024_14 分钟前
LRU缓存淘汰算法详解与C++实现
c++·算法·缓存
无敌最俊朗@27 分钟前
C++-Qt-音视频-基础问题01
开发语言·c++
折戟不必沉沙27 分钟前
C++四种类型转换cast,其在参数传递时的作用
c++
kyle~29 分钟前
C++---万能指针 void* (不绑定具体数据类型,能指向任意类型的内存地址)
开发语言·c++
誰能久伴不乏41 分钟前
Linux 进程通信与同步机制:共享内存、内存映射、文件锁与信号量的深度解析
linux·服务器·c++
_F_y1 小时前
C++异常
c++
小龙报1 小时前
《算法通关指南:算法基础篇 --- 一维前缀和 — 1. 【模板】一维前缀和,2.最大子段和》
c语言·数据结构·c++·算法·职场和发展·创业创新·visual studio
郝学胜-神的一滴2 小时前
Effective STL 第9条:C++容器元素删除技巧详解
开发语言·c++·程序人生·stl
Ma_Hong_Kai2 小时前
带复选框的combox
c++·mfc
syker3 小时前
太极指令集架构(TCIS)v1.1与主流指令集比较研究报告
c++·架构