これはすでに書かれている問題であることは理解しており、いくつかの説明に従いましたが、まだうまくいかないようです。検索中に見落とした説明があるか、少し間違ったことをしている可能性があります。
グラフを作成し、あるグラフから別のグラフにデータをコピーしようとしています。これだけ効きます。しかし、私はそれらを別々にするのに苦労しています。
graph_maker temp_graph;
temp_graph = kruskal_graph;
for(unsigned int j = 0; j < min_edges.size(); j++){
temp_graph.add_undirected_edge(min_edges[j].node1, min_edges[j].node2, min_edges[j].edge_dist);
if(check_cycle(temp_graph) == true)
temp_graph = kruskal_graph;
else
kruskal_graph = temp_graph;
}
temp_graph
andはkruskal_graph
と同じ型graph_maker
です。関数を実行するadd_undirected_edge()
と、両方のオブジェクトにエッジが追加されます。それらを別々に保つために、graph_maker
クラスの代入演算子をオーバーロードしようとしました:
graphmaker& operator=(const graphmaker& Other)
{
v_map = Other.v_map;
return *this;
}
これv_map
は、必要なデータを含む構造です。私も次のことを試しました:
graphmaker& operator=(graphmaker other)
{
using std::swap;
swap(v_map, other.v_map);
return *this;
}
しかし、これらの手法はどちらも、2 つのオブジェクトを分離したままにはしていません。両方について、エッジを追加すると、for ループの後の最初の行の両方に追加されます。単純な間違いを犯しているように感じますが、その理由を見つけるのに苦労しています.
ご意見ありがとうございます。
編集:
struct vertex
{
vector <pair<float,vertex*>> adj; //cost of edge, destination vertex
string name;
vertex(string s){
name=s;
}
};
class graphmaker
{
public:
/*
graphmaker& operator=(graphmaker other)
{
using std::swap;
swap(v_map, other.v_map);
// repeat for other member variables;
return *this;
}*/
graphmaker& operator=(const graphmaker& Other)
{
v_map = Other.v_map;
return *this;
}
//typedef map<string, vertex *> map;
map<string, vertex *> v_map;
void add_vertex(const string&);
void add_directed_edge(const string& from, const string& to, float cost);
void add_undirected_edge(const string& node1, const string& node2, float cost);
void make_graph(const string& name);
};