我最近开始使用C++ std::sets
,所以我在谷歌找不到答案。
我有std::set
个int
个值(例如,让它为1, 2, 3, 4, 5
)。任务是计算两个第一元素之间的差异。是否可以使用C ++?
我正在使用数据结构std::set
;我知道第一个元素可以这样:
int diff = * arSeq.begin();
提到arSeq
的地方set
。
有没有办法获得第二个元素?
答案 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`