如何在c ++中获得set的第一个元素

时间:2017-11-18 09:30:19

标签: c++ set

我是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’

请帮我纠正我的语法。

2 个答案:

答案 0 :(得分:2)

阐述Ed的注释,C++中的一个集合默认是弱排序的,因此迭代排序有一些保证,但作为一个数学概念,集合中没有“顺序”,因此实现通常不允许获得“第一”元素。

如果您只想获取任何元素,无需迭代即可使用

auto someElementIterator = myset.begin()

将返回某个元素的迭代器。要“弹出”它,你可以用

跟随它
myset.erase(someElementIterator)

您可以使用*someElementIterator获取元素。

关于你的错误:

迭代器在某种意义上就像一个指针,你需要 - &gt;没有。访问元素大小(而不是迭代器大小,不存在)。这样:

someElementIterator->size()

someElementIterator.size()

答案 1 :(得分:0)

一个集合有一个迭代器,所以你可以像How to iterate std::set?

那样遍历它

return_moves.begin()返回“first”元素的迭代器(在外行语中是指向“first”元素的更好指针)。所以

return_moves.begin()->size(())
应该使用

我正在使用“first”元素,因为根据排序标准,它是集合中的最小元素(它可能是第一个插入但可能是其他东西)。