减去unordered_set的迭代器不起作用[重复]

问题描述 投票:0回答:1

这个问题在这里已有答案:

试图在无序集中找到元素的索引。发现迭代器的减法(运算符' - ')是这样做的一种方式。

vector<int> twoSum(vector<int>& nums, int target) 
{
    unordered_set<int> comp; 
    vector<int> res;
    for(int i = 0; i<nums.size(); i++)
    {
        //unordered_set<int>::iterator it = comp.find(nums[i]);
        if (comp.find(nums[i])!=comp.end())
        {
            //int pos = distance(comp.begin(), comp.find(nums[i]));
            auto pos = comp.find(nums[i]) - comp.begin();
            res.push_back((int)pos);
            res.push_back(i);
        }
        comp.insert(target-nums[i]);
    }
    return res;
}

但我得到自动pos的编译错误:

no match for 'operator-' (operand types are 'std::unordered_set<int>::iterator {aka std::__detail::_Node_iterator<int, true, false>}' and 'std::unordered_set<int>::iterator {aka std::__detail::_Node_iterator<int, true, false>}')

包含了iostream,iterator和unordered_set。请指教。谢谢

c++ c++11 c++14 hashset unordered-set
1个回答
1
投票

无序集的迭代器不是随机访问,因此您必须使用auto index = std::distance(iterator_a, iterator_b);

但是,此操作为O(N),这将导致您的算法为O(N ^ 2),因此我建议您使用其他算法来解决您的问题。

© www.soinside.com 2019 - 2024. All rights reserved.