You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++对二进制文件读取的结构体排序报invalid operator<错误如何解决

问题根源

你遇到的invalid operator<报错核心原因是比较器的实现错误:ticket结构体里的destination是char[50]类型,直接用<运算符比较两个数组名时,实际比较的是两个数组的首地址,而不是字符串的字典序,完全不符合std::sort对比较器严格弱序的要求,因此触发断言报错。

修复方案

1. 基于现有char数组结构的修复

替换比较器逻辑,用C标准库的字符串比较函数strcmp判断字符串字典序,同时引入对应的头文件:
首先在代码开头新增头文件引用:

#include <cstring>

再修改比较器实现:

// 用const引用传递参数可避免结构体拷贝,性能更优也更符合规范
bool comparator(const ticket& a, const ticket& b)
{
    // strcmp返回值小于0表示a.destination字典序小于b.destination
    return strcmp(a.destination, b.destination) < 0;
}

2. 可选C++风格优化方案

如果没有强制要求用char数组存储数据,可以把结构体成员替换为std::string类型,天然支持<运算符做字符串字典序比较:
首先引入string头文件:

#include <string>

修改结构体和比较器:

struct ticket{
    std::string destination;
    std::string flightNumber;
    std::string Aircraft;
};

bool comparator(const ticket& a, const ticket& b)
{
    return a.destination < b.destination;
}
额外注意事项

你当前代码如果读取文件失败,newA数组会处于未初始化状态,直接传入sort会触发未定义行为,建议在文件打开失败的分支里直接终止程序,不要执行后续排序逻辑。

内容的提问来源于stack exchange,提问作者OlegEwtuschenko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 12:45:09