2017-10-17 13 views
-4

私は最近C++ std::setsで作業を開始しました。そのため、Googleで回答が見つからない質問があります。C++ - 最初の2つの要素の違い

の値は、intです(たとえば、1, 2, 3, 4, 5とする)。タスクは、2つの最初の要素の差を計算することです。 C++で行うことは可能ですか?

私はデータ構造を使用していますstd::set;そして、私は最初の要素がそれを得ることができることを知っています:

int diff = * arSeq.begin();

arSeqが記載されている。set

2番目の要素を取得する方法はありますか?

+0

[参照](http://en.cppreference.com/w/cpp/container/set)を参照して、どの要素のアクセスオプションを確認する必要があります。 – NathanOliver

+0

あなたは数学的意味での集合を意味しますか?これらは順序付けされておらず、「最初の」要素がないためです。あなたがデータ構造の意味で 'std :: set'について話しているなら、投稿を明確にしてください。 – StoryTeller

+0

要素の順序が定義されていない集合の定義はありませんか?最初の2つを定義してください。 – Yunnosch

答えて

5

はい、可能です。 std::set::beginイテレータを介して最初の要素にアクセスし、次の要素をstd::next関数を使用してアクセスします。

が含まれています

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

std::setためのコンテナがある:として

#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; 
} 

は、あなたがもう一度あなたのセットを定義した場合でも、 -1のと同じ結果が得られますのでご注意くださいソートされた一意のオブジェクトのセット...

+2

ありがとうございました!それは私が欲しかったのとまったく同じように働いていました:) – Niklex

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; 
} 
+0

私の目は 'if(not(...') 'C++で' 'not'はキーワードです...今はもう悲しいです... – bolov

0

最初の2つの要素はどういう意味ですか?最初の2つの要素が挿入された?それは不可能です。 設定要素は、指定された比較器でソートされます。デフォルトでは、プリミティブ要素は昇順にソートされます。次のプログラムの出力を参照してください。

// 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` 
+0

実用的な答えはすでに与えられています。とにかくあなたの返事をありがとう – Niklex

関連する問題