- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在定义我的类时做错了,这导致 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/
我需要对一个键的所有值执行一些代码,并且我需要对每个键重复该操作。我在寻找类似的东西: for(auto key_iterator = hash_multimap.begin_keys();
这可能真的很简单,但我找不到一个简单的例子。我知道使用 hash_multimap 可以将多个值映射到一个键。但是我将如何访问这些值。我偶然发现的所有示例总是只访问映射到键的第一个值。这是我的意思的一
计算hash_multimap 中所有不同键的最有效方法是什么? 例如如果我有一个已经填充的 hash_multimap,(例如,一个容器,您可以在其中存储具有相同键的多个实体)我如何检索 key 集
我在定义我的类时做错了,这导致 Microsoft 的 hash_multimap 实现“未命中”。这是我的类(class): class TimeParameter { public: TimePa
我想序列化一个 hash_multimap,protocal buffers 支持吗?我试过 boost serializaitn,但它有关于 hash_multimap 的头文件混淆,所以我想尝试谷
我是一名优秀的程序员,十分优秀!