在 C++中 使用Map时出现了这个问题:
严重性 代码 说明 项目 文件 行 禁止显示状态
错误 C2678 二进制“<”: 没有找到接受“const _Ty”类型的左操作数的运算符(或没有可接受的转换) QtWidgetsApplication1 C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30037\include\xstddef 127
你说说咱这头一次使用,怎么就出这么个问题呢?
struct mykey
{
int iRegion_Id;
int iGrade;
mykey(int _iRegion_Id, int _iGrade)
{
int = _iRegion_Id;
iGrade = _iGrade;
}
~mykey()
{
}
};
map<mykey,myvalue> hhh;
于是我在后面通过key来设置value时,怎么也设置不对
找不到原因就去问百度:
只有重载<的类或者结构才能作为map的key值。string可以作为key值是因为string重载了<。如果不重载<会提示如下错误:
error C2676: 二进制“<”: “const C”不定义该运算符或到预定义运算符可接收的类型的转换
也就是说,你想要用自定义的数据结构来作为key的值,那么,你就要重载 < 运算符。
于是我改了我的程序:
struct mykey
{
int iRegion_Id;
int iGrade;
mykey(int _iRegion_Id, int _iGrade)
{
iRegion_Id = _iRegion_Id;
iGrade = _iGrade;
}
bool operator < (const mykey& pk) const
{
if (this->iRegion_Id < pk.iRegion_Id)
return true;
else if (this->iRegion_Id == pk.iRegion_Id && this->iGrade < pk.iGrade)
return true;
return false;
}
~mykey()
{
}
};
map<mykey,myvalue> hhh;
实际上我写的这个重载的意思:
bool operator < (const mykey& pk) const
{
if (this->iRegion_Id < pk.iRegion_Id)
return true;
else if (this->iRegion_Id == pk.iRegion_Id && this->iGrade < pk.iGrade)
return true;
return false;
}
还有一种用法:
if (this->iRegion_Id < pk.iRegion_Id || this->iGrade < pk.iGrade)
return true;
return false;
同样可以实现,但是,第一种方法有优先级.
就是,保证,这两个参数同时决定了key的值,如果有多个 || 多个就可以了!
个人是这么认为的,如果有问题,还请cue me!