C ++ - 前两个元素之间的区别

时间:2017-10-17 18:51:01

标签: c++ set

我最近开始使用C++ std::sets,所以我在谷歌找不到答案。

我有std::setint个值(例如,让它为1, 2, 3, 4, 5)。任务是计算两个第一元素之间的差异。是否可以使用C ++?

我正在使用数据结构std::set;我知道第一个元素可以这样:

  

int diff = * arSeq.begin();

提到arSeq的地方set

有没有办法获得第二个元素?

3 个答案:

答案 0 :(得分:5)

是的,这是可能的。通过std::set::begin迭代器访问第一个元素,使用std::next函数访问下一个元素。

#include <iostream>
#include <set>

int main() {
    std::set<int> s = { 1, 2, 3, 4, 5 };
    auto result = *s.begin() - *std::next(s.begin());
    std::cout << result;
}

请注意,即使您将设置定义为:{/ p>,您也会再次获得-1的相同结果

std::set<int> s = { 5, 3, 1, 4, 2 }; 

因为std::set是一个容器:

  

包含一组有序的唯一对象......

答案 1 :(得分:0)

您可以通过以下方式执行此操作

#include <iostream>
#include <set>
#include <iterator>

int main()
{
    std::set<int> s({ 1, 2, 3, 4, 5 });

    long long int diff = 0;

    if (not (s.size() < 2))
    {
        auto first = s.begin();
        auto second = std::next(first);

        diff = *first < *second ? ( long long int )*second - *first : ( long long int )*first - *second;
    }

    std::cout << "difference = " << diff << std::endl;

    return 0;
}

答案 2 :(得分:0)

前两个元素是什么意思?前两个元素插入?那不可能。 使用给定的比较器对Set元素进行排序默认情况下,原始元素按升序排序。请参阅以下程序的输出。

// set::begin/end
#include <iostream>
#include <set>
#include<functional>

int main ()
{
  int myints[] = {75,23,65,42,13};
  std::set<int, std::greater<int>> myset (myints,myints+5);

  auto first = myset.begin();
  auto second = std::next(first);

  std::cout <<*first<< ", " <<*second<<"\n";

  return 0;
}`enter code here`