使用c ++无序+映射的无效操作数
Posted
技术标签:
【中文标题】使用c ++无序+映射的无效操作数【英文标题】:invalid operands using c++ unordered+map 【发布时间】:2020-03-22 04:29:20 【问题描述】:问题陈述
给定一个整数数组,返回两个数字的索引,使它们相加到一个特定的目标。
您可以假设每个输入都只有一个解决方案,并且您不能两次使用相同的元素。
问题:
我正在尝试使用哈希图来实现解决此问题的算法。这是我第一次使用哈希图,我正在学习它。我不确定为什么会收到以下错误。这个问题来自leet代码。提前谢谢你。
Line 10: Char 35: fatal error: invalid operands to binary expression ('int' and 'std::pair<const int, int>')
if((target - nums[i]) == *umap.find(key))
代码
class Solution
public:
vector<int> twoSum(vector<int>& nums, int target)
// key would be the element value would be the complement
vector<int> sol;
unordered_map<int,int> umap;
for(int i=0; i<nums.size(); i++)
int key = nums[i];
if((target - nums[i]) == umap.find(key))
sol.push_back(i);
sol.push_back(umap[i]);
else
umap[nums[i]] = i;
cout << umap[nums[i]]<< endl;
return sol;
;
【问题讨论】:
我知道这可能看起来很挑剔,但你能用实际文本替换你的文本图像吗?它提高了问题的可搜索性,帮助使用电子阅读器的人,并且一些图像托管网站可能会被阻止(尤其是在人们的工作场所——在瘟疫时期这似乎不太可能,但仍然值得考虑) umap.find() 返回无序映射的迭代器。我们无法将 int 与迭代器进行比较。试试(target - nums[i]) == *umap.find(key)
。欲了解更多信息,请查看en.cppreference.com/w/cpp/container/unordered_map
@user5876164 我们也无法将 int 与 pair 进行比较。
@Nick 我认为您的代码应该包含*umap.find(key)
而不是umap.find(key)
,因为您的编译结果显示...
@BessieTheCow 哎呀,我的错。然后umap.find(key)->second
可以正常工作。或者只使用umap[key]
。
【参考方案1】:
如果存在具有匹配键的元素,std::unordered_map
的 find
函数将返回一个指向找到的元素的迭代器。迭代器指向的元素是一个包含键和值的std::pair
。因此,如果要获取找到的元素的值,则需要取消引用迭代器并获取second
值,通过执行umap.find(key)->second
,如果具有匹配键的元素存在,则相当于umap[key]
.
【讨论】:
以上是关于使用c ++无序+映射的无效操作数的主要内容,如果未能解决你的问题,请参考以下文章