我是 C++ 的新手,我已经声明了一组集合:
std::set< std::set<int> > return_moves;
Run Code Online (Sandbox Code Playgroud)
并在其中推送了一些值。我想访问这个集合的第一个元素,以便我可以计算该内部集合中的元素数量。我正在努力让它过去
return_moves.begin().size()
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
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’
Run Code Online (Sandbox Code Playgroud)
请帮我纠正我的语法。
详细说明 Ed 的评论,C++默认情况下,集合是弱排序的,因此迭代排序有一定的保证,但作为数学概念,集合中没有“顺序”,因此实现通常不允许获得“第一” “ 元素。
如果您只想获取任何元素,而不需要迭代,您可以使用
auto someElementIterator = myset.begin()
Run Code Online (Sandbox Code Playgroud)
这将返回一个迭代器到某个元素。要“弹出”它,您可以跟随它
myset.erase(someElementIterator)
Run Code Online (Sandbox Code Playgroud)
你可以使用*someElementIterator.
关于你的错误:
迭代器在某种意义上就像一个指针,你需要 -> not 。访问元素大小(而不是迭代器大小,它不存在)。所以:
someElementIterator->size()
Run Code Online (Sandbox Code Playgroud)
而不是 someElementIterator.size()。
小智 5
我迟到了,抱歉,我刚刚通过并为下一个开发人员找到了解决方案。
要获取第一个元素,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>
Run Code Online (Sandbox Code Playgroud)
因为return_moves.begin()返回集合的第一个元素的迭代器,并且通过添加*我们将收到第一个元素的值。