C++ unordered_set<insert function> return 值
C++ unordered_set<insert function> return value
我正在尝试检查 unordered_set 的 insert() 函数的 return 值,但遇到以下错误:
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<std::__detail::_Node_iterator<int, true, false>, bool>' 转换为非标量类型 'std::unordered_set::iterator {aka std::__detail::_Node_iterator<int, true, false>}'
-->如果插入函数不成功,插入函数应该发送一个空迭代器,但我无法为插入函数的 return 值声明正确的迭代器。
--> 在这种情况下,插入函数的 unordered_set 迭代器的正确类型应该是什么?
您对 unordered_set::insert 的 return 值的理解不正确。
Returns a pair consisting of an iterator to the inserted element (or
to the element that prevented the insertion) and a bool denoting
whether the insertion took place.
(来自 cppreference)
所以正确的声明是
std::pair<std::unordered_set<int>::iterator, bool> it = t.insert(1);
但实际上(假设您有 C++11)编写起来要容易得多
auto it = t.insert(1);
如果你只对returned迭代器感兴趣,那么你也可以写
std::unordered_set<int>::iterator it = t.insert(1).first;
或再次使用自动
auto it = t.insert(1).first;
我正在尝试检查 unordered_set 的 insert() 函数的 return 值,但遇到以下错误:
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<std::__detail::_Node_iterator<int, true, false>, bool>' 转换为非标量类型 'std::unordered_set::iterator {aka std::__detail::_Node_iterator<int, true, false>}'
-->如果插入函数不成功,插入函数应该发送一个空迭代器,但我无法为插入函数的 return 值声明正确的迭代器。 --> 在这种情况下,插入函数的 unordered_set 迭代器的正确类型应该是什么?
您对 unordered_set::insert 的 return 值的理解不正确。
Returns a pair consisting of an iterator to the inserted element (or to the element that prevented the insertion) and a bool denoting whether the insertion took place.
(来自 cppreference)
所以正确的声明是
std::pair<std::unordered_set<int>::iterator, bool> it = t.insert(1);
但实际上(假设您有 C++11)编写起来要容易得多
auto it = t.insert(1);
如果你只对returned迭代器感兴趣,那么你也可以写
std::unordered_set<int>::iterator it = t.insert(1).first;
或再次使用自动
auto it = t.insert(1).first;