【问题标题】:How to get just first element of set in c++如何在c ++中仅获取集合的第一个元素
【发布时间】:2018-05-02 01:09:18
【问题描述】:

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

请帮我纠正我的语法。

【问题讨论】:

  • s/return_moves.begin().size()/return_moves.begin()-&gt;size()
  • 一个集合没有第一个元素的概念。
  • @EdHeal 然后访问任何元素我应该循环它吗?
  • @SachinSingh 错误信息很清楚,不是吗?你有一个std::set&lt;std::set&lt;int&gt; &gt;::iterator 而不是std::set&lt;int&gt;
  • 迭代器在某种意义上就像一个指针,你需要-&gt; 而不是. 来访问元素大小(而不是迭代器大小,它不存在。)

标签: c++ set


【解决方案1】:

详细说明 Ed 的评论,C++ 中的集合默认情况下是弱排序的,因此对迭代排序有一定的保证,但作为一个数学概念,集合中没有“顺序”,因此实现不通常允许获取“第一个”元素。

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

auto someElementIterator = myset.begin()

这将返回一个迭代器到某个元素。要“弹出”它,您可以跟随它

myset.erase(someElementIterator)

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

关于您的错误:

迭代器在某种意义上就像一个指针,你需要 -> not 。访问元素大小(而不是迭代器大小,它不存在)。所以:

someElementIterator->size()

并且不是someElementIterator.size()

【讨论】:

  • 将擦除方法从myset中删除该元素?
  • @SachinSingh 是的。
  • 它返回给我140728051101848,这不是内部集合的 ant 中的元素数。
  • @kabanus 关于“根据定义是无序的元素集合”,std::set 遵循specific order
  • @miradham 谢谢,有一段时间了,我忘记了默认的set 实际上是订购的。固定。
【解决方案2】:

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

return_moves.begin() 返回指向“第一个”元素的迭代器(用外行的话来说是指向“第一个”元素的更好的指针)。所以

return_moves.begin()->size()

应该改为使用。

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

【讨论】:

    【解决方案3】:

    对不起,我迟到了,我刚刚通过并为下一个开发者找到了解决方案。
    要获取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()返回集合的第一个元素的迭代器,通过添加*我们将得到第一个元素的值。

    【讨论】:

      猜你喜欢
      • 2021-12-08
      • 1970-01-01
      • 2020-11-12
      • 2014-08-19
      • 2017-03-11
      • 1970-01-01
      • 2021-05-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多