2017-11-18 192 views
0

是新的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’ 

请帮我纠正我的语法。

+1

s /'return_moves.begin()。size()'/'return_moves.begin() - > size()' – user0042

+1

一个集合没有第一个元素的概念。 –

+0

@EdHeal然后访问任何元素,我应该循环它吗? –

回答

1

为了详细说明Ed的评论,一组定义是一个无序的元素集合。因此,实现并不保证循环一个集合时的任何特定顺序。

如果你只想获取任何元素,不反复可以使用

auto someElementIterator = myset.begin() 

将迭代器返回的一些元素。 “啪”,它可以用

myset.erase(someElementIterator) 

遵循它,你可以得到使用*someElementIterator的元素。

关于你的错误:

迭代器是在一些有的像指针意义,你需要 - >不是。访问元素大小(而不是迭代器大小,它不存在)。所以:

someElementIterator->size() 

someElementIterator.size()

+0

将擦除方法从'myset'中删除该元素? –

+0

@SachinSingh Yup。 – kabanus

+0

问题已更新 –

0

一组有一个迭代器,所以你可以遍历它像这样How to iterate std::set?

return_moves.begin()返回一个迭代器的“第一”元素(在外行人而言更好的指针“第一”元素)。所以

return_moves.begin()->size(()) 

应该用来代替。

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

+0

问题已更新 –