没有操作员"=="处理这些操作数

No operator "==" maches these operands

本文关键字:操作数 处理 操作员      更新时间:2023-10-16

所以我尝试将我从>它获得的迭代器值与 int 进行比较,以从值的基础上从 map 中获取键。我有这个代码:

std::map<string, std::vector<int> >::const_iterator it;
void getStudentByGrade(int gradeComp)
{
for (it = studMap.begin(); it != studMap.end(); it++)
{
if (it->second == gradeComp)
{
cout << it->first;
}
}
}

在 if 语句中我得到错误,但我比较两个整数不是吗?作为 gradeComp 和 it->second 传递的 int。

错误是:

严重性代码说明项目文件行抑制状态 错误 C2678 二进制"==":找不到需要左手的运算符 类型为"const std::vector>"的操作数(或那里 是不可接受的转换(

如何解决错误?我找到了仅使用迭代器获取值键的示例。

我比较两个整数不是吗?

不,你没有。看:

it->second == gradeComp

由于itstd::map<string, std::vector<int>>的(常量(迭代器,it->second的类型为std::vector<int> const&。另一方面,gradeComp是一个int。这就是为什么你的编译器告诉你

没有运算符 "==" 来管理这些操作数

这些操作数是整数和整数的向量。


如何解决错误?

好吧,这取决于你的意思。你的意思是在向量中搜索gradeComp吗?或者,也许您的意思是将其与向量中的特定值进行比较?

// is gradeComp contained in the found vector?
if (end(it->second) != std::find(begin(it->second), end(it->second), gradeComp))
{ /* ... */ }
// does gradeComp match n-th value of vector?
if (gradeComp  == it->second[n])
{ /* ... */ }