gpt4 book ai didi

c++ - 为什么 QMultiMap 的查找操作没有像我预期的那样工作?

转载 作者:太空狗 更新时间:2023-10-29 21:05:37 25 4
gpt4 key购买 nike

我有一个 QMultiMap<QDateTime, SomeOwnDataType>我想从中检索具有特定时间戳的所有值。这就是我所做的:

QMap<QDateTime, Appointment>::iterator it = _reminders.find(now);

哪里now值为 di 6.mrt 12:07:00 2012。这是我的循环条件:

while (it != _reminders.end() && it.key() == now) {

这是 _reminders 的状态对象:

Debug

与我的预期相反,循环被完全跳过。怎么会?

最佳答案

我认为问题在于两个时间戳不相等。如果检查 QDateTime== 运算符代码,您会发现如果时间和日期都相等,则相等。

bool QDateTime::operator==(const QDateTime &other) const
{
if (d->spec == other.d->spec && d->utcOffset == other.d->utcOffset)
return d->time == other.d->time && d->date == other.d->date;
else {
QDate date1, date2;
QTime time1, time2;

d->getUTC(date1, time1);
other.d->getUTC(date2, time2);
return time1 == time2 && date1 == date2;
}
}

但是时间相等运算符比较的是毫秒:

bool operator==(const QTime &other) const { return mds == other.mds; }

其中 mds 是以毫秒为单位的时间。在QTime构造函数中,mds计算如下:

 mds = (h*SECS_PER_HOUR + m*SECS_PER_MIN + s)*1000 + ms;

如果你只是检查两个时间戳之间的差异是否在一个限制内,会更安全。例如:

while (it != _reminders.end() && abs(now.msecsTo(it.key())) < aLimitInMsecs) {

关于c++ - 为什么 QMultiMap 的查找操作没有像我预期的那样工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9583017/

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