我是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’
请帮我纠正我的语法。
答案 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”元素,因为根据排序标准,它是集合中的最小元素(它可能是第一个插入但可能是其他东西)。