gpt4 book ai didi

c++ - 在 hash_multimap 搜索中找不到 key

转载 作者:行者123 更新时间:2023-11-30 04:39:50 25 4
gpt4 key购买 nike

我在定义我的类时做错了,这导致 Microsoft 的 hash_multimap 实现“未命中”。这是我的类(class):

class TimeParameter {
public:

TimeParameter(int _year, int _julianDay, int _hour) : m_Year(_year),
m_JulianDay(_julianDay),
m_Hour(_hour){}

int GetHour() const {return m_Hour;}
int GetJulianDay() const {return m_JulianDay;}
int GetYear() const {return m_Year;}


bool operator==(const TimeParameter &_rhs);
bool operator < (const TimeParameter &_rhs);
operator size_t() const;
friend bool operator<(const TimeParameter &_lhs, const TimeParameter &_rhs);

private:

int m_Hour,
m_JulianDay,
m_Year;
};

以cpp文件为

TimeParameter::operator size_t() const
{
return (size_t)(8765u * (m_Year % 6)) + (size_t)(m_JulianDay*24u) + (size_t)m_Hour;
}

bool operator<(const TimeParameter &_lhs, const TimeParameter &_rhs)
{
if( _lhs.GetYear() > _rhs.GetYear() )
{
return false;
}
else if( _lhs.GetYear() == _rhs.GetYear()
&& _lhs.GetJulianDay() > _rhs.GetJulianDay() )
{
return false;
}
else if( _lhs.GetYear() == _rhs.GetYear()
&& _lhs.GetJulianDay() == _rhs.GetJulianDay()
&& _lhs.GetHour() > _rhs.GetHour() )
{
return false;
}

return true;
}

bool TimeParameter::operator==(const TimeParameter &_rhs)
{
return m_Hour == _rhs.GetHour()
&& m_JulianDay == _rhs.GetJulianDay()
&& m_Year == _rhs.GetYear();
}

bool TimeParameter::operator <(const TimeParameter &_rhs)
{
if( m_Year > _rhs.GetYear() )
{
return false;
}
else if( m_Year == _rhs.GetYear()
&& m_JulianDay > _rhs.GetJulianDay() )
{
return false;
}
else if( m_Year == _rhs.GetYear()
&& m_JulianDay == _rhs.GetJulianDay()
&& m_Hour > _rhs.GetHour() )
{
return false;
}

return true;
}

如果我随后将此类用作 hash_multimap<'TimeParameter,Foo'> 中的键,那么我将无法使用 hash_multimap::find() 查找任何内容。我做错了什么?

注意:是的,我意识到这是另一个日期时间样式类(我的轮子是方形的!)我们必须根据项目要求为每个数据库表的每一行创建一个类。是的,他们确实确实为年、日、小时创建了一个表,而不是使用完善的 DateTime 类型列。既然他们付钱给我们,我们就不会争论。

此外,请随时指责我违反了 DRY。

更新:

将 size_t() 运算符更改为 return 0; 没有解决问题。它仍然找不到任何东西。将运算符更改为始终 yield true 也没有解决问题。一定是我在程序的其他地方没有做对导致这样的错误。

最佳答案

为什么你有两个 operator< 的实现? ?保留任何一个。

此外,您可能需要定义适当的哈希函数(并另外指定要使用的 op<)。

关于c++ - 在 hash_multimap 搜索中找不到 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1953552/

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