Unordered_set的迭代器的减法不起作用
Subtraction of iterators for unordered_set does not work
试图在无序集中找到元素的索引。发现迭代器的减法(运算符' - '(是一种方法。
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,迭代器和unordered_set。请指教。谢谢
无序集的迭代器不是随机访问,因此您必须使用 auto index = std::distance(iterator_a, iterator_b);
但是,此操作是O(n(,这将导致您的算法为O(n^2(,因此我建议您使用另一种算法来解决您的问题。
相关文章:
- 为什么output_editor Concept不需要output_e迭代器标记
- C++不兼容的迭代器类型
- 使用 find() 通过 std::set 的迭代器将不起作用。出了什么问题?
- 使用 std::vector<Particle> 粒子;函数 .at() 不能与迭代器一起使用,它作为 for 循环中的参数
- 我可以在 std::list 中移动元素而不会使迭代器或引用无效,但是如何移动呢?
- 为什么我不能将迭代器应用于接受 const_iterator 引用的函数?
- 与运算符"!="不匹配(c++ 迭代器)
- 如何不擦除迭代器(从"Effective STL")
- 有人能解释一下他们的意思是list.pushback文档(不会使迭代器无效)吗
- 不会使迭代器(和指针)无效的容器
- std::cin >>向量[i]不会让迭代器正常工作吗?
- 调试断言错误 - 列出不兼容的迭代器
- c++:不能给迭代器赋索引
- 我可以(a)不通过输入迭代器写入,或者(b)只通过一个迭代器读取一次吗?
- c++不需要删除迭代器
- C++列出不兼容的迭代器
- std::for_each等效项,它不取消引用迭代器
- 不带循环迭代器的枚举
- std::list擦除不兼容的迭代器
- 深度缓冲区似乎不起作用-OpenGL着色器