c++ - C++ 无序集返回值
问题描述
我正在尝试检查 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<std::__detail::_Node_iterator<int, true, false>, bool>' 转换为非标量类型 'std::unordered_set::iterator {aka std::__detail: :_Node_iterator<int, true, false>}' 请求
-->如果插入函数不成功,插入函数应该发送一个空迭代器,但我无法为插入函数的返回值声明正确的迭代器。--> 在这种情况下,插入函数的正确类型的 unordered_set 迭代器应该是什么?
解决方案
您对 unordered_set::insert 返回值的理解是不正确的。
返回一个对,由一个指向插入元素(或阻止插入的元素)的迭代器和一个表示插入是否发生的布尔值组成。
(来自cppreference)
所以正确的声明是
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;
推荐阅读
- rust - 如何使用 wasm-bindgen 调用作为模块的 JavaScript 函数?
- php - 使用 xhp-lib v4 和 hhvm v 4.81.1 运行最小应用程序会引发错误
- sql - 两个表中的 SQL 内连接只匹配一次
- sql - 萨斯-。SQL 格式
- flutter - 如何使用 dart/flutter 通过 UDP 流式传输麦克风音频?
- jquery - 数据表 - 将多个列与数据标题一起呈现
- python - Python 将 np.array 变成一个列表
- angular - Angular 导入模块的奇怪行为
- python - Python asyncio:未来与任务
- vue.js - Vue 中大型交错列表的速度动画