如何在 c++ 中获取集合的第一个元素
How to get just first element of set in c++
我是 c++ 的新手,我已经声明了一组集合:
std::set< std::set<int> > return_moves;
并且还在其中推送了一些价值观。我想访问这个集合的第一个元素,以便我可以计算该内部集合中的许多元素。我正在努力通过
return_moves.begin().size()
我收到此错误:
set_diff.cpp: In function ‘int main()’:
set_diff.cpp:62:47: error: ‘std::set<std::set<int> >::iterator {aka struct std::_Rb_tree_const_iterator<std::set<int> >}’ has no member named ‘size’
请帮助我纠正我的语法。
详细阐述 Ed 的评论,C++
中的集合默认是弱有序的,因此迭代排序有一定的保证,但作为一个数学概念,集合中没有"顺序",因此实现通常不允许获得"第一个"元素。
如果你只想获取任何元素,而不迭代,你可以使用
auto someElementIterator = myset.begin()
这将向某个元素返回一个迭代器。要"弹出"它,您可以按照它进行操作
myset.erase(someElementIterator)
您可以使用 *someElementIterator
获取元素。
关于您的错误:
迭代器在某种意义上就像一个指针,你需要 -> 不需要。访问元素大小(而不是不存在的迭代器大小(。所以:
someElementIterator->size()
而不是someElementIterator.size()
.
对不起,我刚刚通过并找到了下一个开发人员的解决方案。
要获取std::set
的第一个元素,您可以使用:
std::set< std::set<int> > return_moves;
auto oneMove = *(return_moves.begin()); // will return the first set<int>
oneMove.size(); // will return the size of the first set<int>
因为return_moves.begin()
返回集合中第一个元素的迭代器,并且通过添加*
我们将接收第一个元素的值。
一个集合有一个迭代器,所以你可以像这样循环它 如何迭代 std::set?
return_moves.begin()
返回一个迭代器到"第一个"元素(通俗地说,一个指向"第一个"元素的更好的指针(。所以
return_moves.begin()->size()
应改用。
我使用"first"元素是因为根据排序标准,这是集合中最小的元素(它可能是第一个插入的,但可能是其他东西(。
相关文章:
- 为什么它只打印双链接列表的第一个值,而我的程序却崩溃了
- std::find,返回所有找到的值的替代方法,而不仅仅是存在重复的向量的第一个值
- 如何仅读取文本文件中的第一个值
- 在C++中,如何在第一个"system()"结束后执行第二个"system()"?
- 查找不在标准中的第一个值::设置<int>最小-最大值
- C++:忽略第一个 cin.ignore 之后的输入
- 在C++中打印多个矢量的第一个值
- C++去除前x个元素的有效方法,在不改变向量大小的情况下将第x+1个元素推到第一个
- C++第一个cout将不会打印
- 我们可以在第一个else-if条件结束后使用另一个else-if条件吗
- OpenGL:第二个VBO破坏了第一个VBO
- 为什么第一个Dynamic_cast没有投射到基类?
- OpenGL 2D游戏只绘制第二个精灵纹理而不是第一个
- C++ 为什么程序只读取第一个值
- 在我的第一个C++程序中需要一些帮助(简单)
- 为什么我的代码在第一个 if 语句处中断?
- 是否可以从另一个类对象调用一个类函数而不继承第一个类
- 无法使我的第一个Windows OpenGL窗口抬起并运行
- 将参数初始化为构造函数,而不是第一个
- 使用 STL 映射/集合/多重集/多重映射,如何查找大于或等于搜索键的第一个值