gpt4 book ai didi

c++ - std::sort vector of struct invalid operator<

转载 作者:行者123 更新时间:2023-11-30 02:22:11 24 4
gpt4 key购买 nike

我在 std::sort 的比较函数中遇到严格弱排序的问题。我不明白为什么会失败。

我有一些嵌套结构:

struct date{
int day = 1;
int month = 1;
int year = 2017;
};
struct hhmmss{
int hours = 1;
int minutes = 1;
int seconds = 1;
};
struct dateAndTime {
date d;
hhmmss t;
};
struct Trade
{
/*
other unrelevant data
*/
dateAndTime timeClosed;
};

在我的代码中,在某些时候我有一个填充的 std::vector<Trade>我想对其进行排序。

我的排序函数:

void sortTradesByDate(std::vector<Trade>& trades){
std::sort(trades.begin(), trades.end(), compareDateAndTime);
}

我的比较函数:

bool compareDateAndTime(const Trade& t1, const Trade& t2){
if (t1.timeClosed.d.year < t2.timeClosed.d.year)
return true;
else if (t1.timeClosed.d.month < t2.timeClosed.d.month)
return true;
else if (t1.timeClosed.d.day < t2.timeClosed.d.day)
return true;
else if (t1.timeClosed.t.hours < t2.timeClosed.t.hours)
return true;
else if (t1.timeClosed.t.minutes < t2.timeClosed.t.minutes)
return true;
else if (t1.timeClosed.t.seconds < t2.timeClosed.t.seconds)
return true;
return false;
}

运行函数和调试时,我的第一项传递给了 compareDateAndTime()在其中一个语句(月)上返​​回 true 后通过。下一项在小时比较时返回 true,但随后我得到“调试断言失败!”使用“表达式:无效的运算符<”。

通过谷歌搜索,这与严格的弱排序有关。但是为什么在比较 int 变量时会失败?

最佳答案

你的比较函数没有实现严格的弱排序

考虑这个场景:

  • t1:年=2017,月=2
  • t2:年=2016,月=5

compareDateAndTime(t1, t2) 将返回 true

当且仅当 year 相同时,您才应该继续比较 month

if (t1.timeClosed.d.year < t2.timeClosed.d.year)
return true;
if (t1.timeClosed.d.year > t2.timeClosed.d.year)
return false;
if (t1.timeClosed.d.month < t2.timeClosed.d.month)
return true;
if (t1.timeClosed.d.month > t2.timeClosed.d.month)
return false;

...等等...

关于c++ - std::sort vector of struct invalid operator<,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47609774/

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