哈希函数错误,c++
Hash function errors, c++
这是我写的带有哈希函数的简单示例类。函数可能不是最有效的函数,但哈希函数的质量目前与我无关。
#include<iostream>
#include<unordered_set>
using namespace std;
class Class{
private:
int num;
public:
Class(int n){num=n;}
Class(){num=0;}
int getNum(){return num;}
friend bool operator==(const Class &k1, const Class &k2);
};
bool operator==(const Class &k1, const Class &k2){
return(k1.num == k2.num);
}
namespace std {
template <>
struct hash<Class>{
size_t operator()(const Class & c) const
{
return(31+c.getNum()*7);
}
};
}
void main(){
unordered_set<Class> set;
set.insert(Class(5));
set.insert(Class(55));
set.insert(Class(4));
set.insert(Class(123));
set.insert(Class(11));
for(unordered_set<Class>::iterator it = set.begin(); it!=set.end(); it++)
cout<<it->getNum()<< endl;
}
当Class
的所有字段都是公共的时,这工作正常,但是错误出现在c
return(31+c.getNum()*7);
哈希函数中,因为我无法调用getNum()
函数。我不知道如果我在行size_t operator()(const Class & c) const
删除 const,是否有任何问题,所以对象 c 不是 const?
此外,在最后一行中, cout<<it->getNum()<< endl
,访问getNum()
函数时出错。我不知道如何迭代unordered_set set
并打印数字。
运算符采用 const
类,但调用非 const 成员函数。要修复您的问题,请将getNum
声明为 const
,因为它不会修改类。
class Class{
private:
int num;
public:
Class(int n) : num(n) {}
Class() : num(0) {}
int getNum() const { return num;}
friend bool operator==(const Class &k1, const Class &k2);
};
在上面的示例中,还注意到我使用了成员初始值设定项列表来实例化成员变量。此外,在 main 上将返回类型从 void
更改为 int
,我建议在 main 末尾从 <cstdlib>
返回 0 或 EXIT_SUCCESS
。
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 在某些循环内使用vector.push_back时出现分段错误
- MSVC多行宏编译器错误
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 错误:未在此范围内声明'reverse'