2017-01-21 4 views
0

は、私はこのようなC++でクラスを書いたと仮定します標準ライブラリコンテナで使用できるように、このクラスの演算子とイテレータ。とアルゴリズム

Like:set<string> x;これが可能です。私はset<data> x;としてこのデータクラスを使用したいと私は手順をグーグルしようとしなかったが、どこにも実際の手順を説明するだろう実装例を見つけることができるset<data>::iterator it;

のようなイテレータを使用します。

+0

「データ」はコンテナのような意味ですか? – MRB

+0

はい、まさに:) –

+2

[自分自身のSTLコンテナの作成](http://stackoverflow.com/questions/7758580/writing-your-own-stl-container)の可能な複製 –

答えて

0

Like:set x;これは可能です。私はこのデータクラス をセットxとして使用したいと思います。 set :: iterator itのようなイテレータを使いたい。

標準のコンテナ(ベクトル/セットなど)に合わせてクラスをデータとして使用したいと思っています。シーケンスコンテナ(ベクター)

int main() 
{ 
    data d1(1, 2); 
    data d2(3, 4); 

    vector<data> vec{d1, d2}; //initialize your container with your "data" type objects. 
    for(auto iter = vec.begin(), iter != vec.end();iter++) 
     cout<<*iter;  //for this you need to implement "operator<<" in your data class.  
    return 0; 
} 

連想コンテナ(セット)については

int main() 
{ 
    data d1(1, 2); 
    data d2(3, 4); 
    //you need to impelment "<or>" relational operator in you data class. 
    set<data> st{d1, d2}; //initialize your container with your "data" type objects. 
    for(auto iter = vec.begin(), iter != vec.end();iter++) 
     cout<<*iter;  //for this you need to implement "operator<<" in your data class.  
    return 0; 
} 

については

は、あなたのクラス定義でこれを追加します。

friend ostream& operator<<(ostream& os, const base& obj) 
{ 
    return (os<<obj.memVariable); 
} 
+0

by operator <<左シフトですか? –

+0

@AkaSaitoいいえ、私は出力ストリーム演算子を意味しました。上記の私の答えでそれを追加しました。 – instance

+0

ありがとうございました:)本当に感謝しています:) –

1

あなたはそれを使用したい場合はstd::setstd::mapstd::unordered_map、あなたが実装する必要がstd::unordered_setstd::vectorstd::deque、STDのような他のコンテナについては

bool operator<(const data& other_data) { 
    return ....; 
} 

"弱い少ないオペレータより" ::リストのデータはそのままです。

関連する問題