2016-08-21 16 views
0

私はオブジェクトのベクトルを持っていると私はセットに各オブジェクトをコピーしようとしている:C++:ベクトルに含まれるオブジェクトをセットに挿入するにはどうすればよいですか?

std::set<MinTreeEdge>minTreeOutputSet; 
for(std::vector<MinTreeEdge>::iterator it = minTreeOutput.begin(); it != minTreeOutput.begin(); ++it) 
     minTreeOutputSet.insert(*it); 

これは私にエラー比較のいくつかの種類その与えます(__X < __y 『'で』演算子<を|)挿入の呼び出しに欠落しています。私は試しました

minTreeOutputSet.insert(minTreeOutput[it]); 

しかし、これは私には演算子[]の一致がないというエラーが表示されます。

オブジェクトをセットに挿入することはできませんか?ベクトルのオブジェクトをセットに正しく挿入するにはどうすればよいですか?

+3

また、 'it'を' begin() 'ではなく' minTreeOutput.end() 'と比較するべきでしょう。 – Rakete1111

+3

あなたの 'MinTreeEdge'に'演算子 'を定義してください。 –

+1

ヒント: 'std :: set minTreeOutputSet {minTreeOutput.begin()、minTreeOutput.end()};'を実行するだけです。 –

答えて

4

あなたは言う:

は、これは比較のいくつかの種類が( ' で '演算子<が< __y' を__X |)ことを私にエラーを与えるこのよう

を挿入するための呼び出しから欠落していますMinTreeEdgeoperator<を定義するか、std::set<>の2番目のテンプレート引数として独自の比較呼び出し可能型を渡す必要があります。ここで

は、両方のアプローチのためのいくつかのサンプルコードです:

#include <set> 

struct A 
{ 
    // approach 1: define operator< for your type 
    bool operator<(A const& rhs) const noexcept 
    { 
     return x < rhs.x; 
    } 

    int x; 
}; 

struct B 
{ 
    int x; 
}; 

struct BCompare 
{ 
    // approach 2: define a comparison callable 
    bool operator()(B const& lhs, B const& rhs) const noexcept 
    { 
     return lhs.x < rhs.x; 
    }; 
}; 

int main() 
{ 
    std::set<A> sa; // approach 1 
    std::set<B, BCompare> sb; // approach 2 
} 

あなたがあなたのタイプの定義を変更することはできませんしない限り、私はアプローチ1をお勧めします。

+0

ありがとう、両方のアプローチが必要であることが判明しました! – Itolet

関連する問題