我正在尝试检查unordered_set的insert()函数的返回值,但仍然存在以下错误:
unordered_set<int> t;
t.insert(1);
t.insert(2);
t.insert(3);
t.insert(4);
std::unordered_set<int>::iterator it = t.insert(1); **//Error**
cout<<"size of t="<<t.size()<<endl;错误--从'std::pair,bool>‘转换为非标量类型'std::unordered_set::iterator {aka std::__detail::_Node_iterator}’请求的
-> insert函数应该发送一个空迭代器,如果insert函数没有成功,但是我无法为insert函数的返回值声明正确的迭代器。-在这种情况下,插入函数的适当类型应该是什么unordered_set迭代器?
发布于 2021-02-06 18:35:43
您对unordered_set::insert返回值的理解是不正确的。
返回由迭代器组成的一对插入元素(或阻止插入的元素)和指示插入是否发生的bool。
(来自优先选择)
所以正确的声明是
std::pair<std::unordered_set<int>::iterator, bool> it = t.insert(1);但实际上(假设你有C++11)编写起来要容易得多
auto it = t.insert(1);如果您只对返回的迭代器感兴趣,则还可以编写
std::unordered_set<int>::iterator it = t.insert(1).first;或者再次使用自动
auto it = t.insert(1).first;https://stackoverflow.com/questions/66080468
复制相似问题