2017-07-09 16 views
1

現在、グラフのノードを表すカスタムオブジェクトを使用しています。グラフはそのようなオブジェクトのベクトルに過ぎません。カスタムクラスの適切なコンストラクタ

class node { 
public: 
    unsigned int vertex; 
    unsigned int weight; 
    bool operator< (const node &x){ return weight < x.weight; } 
    bool operator> (const node &x){ return weight > x.weight; } 
}; 

私が直面してる問題は、私は、私は()などのオブジェクトを一backする必要がある場合に、適切なコンストラクタを思い付くことができないんだということです。

unsigned int u, v, w; 
vector<node> G[V]; 
G[u-1].push_back({v-1, w}); 

これは動作する唯一の方法ですが、C++ 11を使用するだけです。それを行うための標準的な方法はありますか?私がg ++でC++ 11フラグを使わずにコンパイルしようとすると、エラーが出ます。 私は基本的にemplace_back()を実装しようとしています。

EDIT: 私はC++

+0

ジャスト++ 17のC++ 14 C C++ 11、、と... – juanchopanza

+0

ええ、私はそれを意味しました。しかし、もし可能であれば、古いバージョンでも動作する方法を見つけたいと思っています。 – fedemengo

+0

「私はC++ 03しか使用できません」と言わなければなりません。 – juanchopanza

答えて

4

これは、それが動作する唯一の方法ですが、ちょうどC++ 11との古いバージョンで私のコードをコンパイルする必要があります。

これは現在の状態なので、これは素晴らしいことです。さらに、これはC++ 14、C++ 17などで動作するはずですので、おそらく安全です。


ところで、私はuが重要である、初期化されていない、ましてや他の変数されているのでG[u-1].push_back({v-1, w});は、単なるサンプルであることを推測します。


私は "後方互換性" ソリューションを探していました。

は、例えば次のようにコンストラクタを定義します。その後、

node(unsigned int v, unsigned int w) : vertex(v), weight(w) {} 

とは、実行します。

G[u - 1].push_back(node(v-1, w)); 
+0

[OK]を、しかし私は明らかな解決策を探していません。 "_後方互換性_"の解決策を探していました。 – fedemengo

関連する問題