使用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)-&gt;second 可以正常工作。或者只使用umap[key] 【参考方案1】:

如果存在具有匹配键的元素,std::unordered_mapfind 函数将返回一个指向找到的元素的迭代器。迭代器指向的元素是一个包含键和值的std::pair。因此,如果要获取找到的元素的值,则需要取消引用迭代器并获取second 值,通过执行umap.find(key)-&gt;second,如果具有匹配键的元素存在,则相当于umap[key] .

【讨论】:

以上是关于使用c ++无序+映射的无效操作数的主要内容,如果未能解决你的问题,请参考以下文章

解析序列/映射节点时出现无效的 yaml 节点错误

使用无序映射与数组搜索

无序映射的实现

如何将字符串添加到 C++ 中无序映射中的字符串向量

c ++为几个无序映射运行循环

如何在 C++ 中使用无序映射