return vector with correct edges

This commit is contained in:
Michael Krasnyk 2017-02-22 12:30:44 +01:00 committed by Patrick Niklaus
parent 748ade5fea
commit 54c35710f6

View File

@ -68,15 +68,15 @@ struct EdgeBasedGraphReader
// and should really be abstracted over. // and should really be abstracted over.
auto directed = SplitBidirectionalEdges(edges); auto directed = SplitBidirectionalEdges(edges);
auto tidied = PrepareEdgesForUsageInGraph(directed); auto tidied = PrepareEdgesForUsageInGraph(std::move(directed));
return std::make_unique<EdgeBasedGraph>(num_nodes, tidied); return std::make_unique<EdgeBasedGraph>(num_nodes, std::move(tidied));
} }
private: private:
// Bidirectional (s,t) to (s,t) and (t,s) // Bidirectional (s,t) to (s,t) and (t,s)
static std::vector<extractor::EdgeBasedEdge> std::vector<extractor::EdgeBasedEdge>
SplitBidirectionalEdges(std::vector<extractor::EdgeBasedEdge> edges) SplitBidirectionalEdges(const std::vector<extractor::EdgeBasedEdge> &edges)
{ {
std::vector<extractor::EdgeBasedEdge> directed; std::vector<extractor::EdgeBasedEdge> directed;
directed.reserve(edges.size() * 2); directed.reserve(edges.size() * 2);
@ -100,12 +100,10 @@ struct EdgeBasedGraphReader
edge.forward); edge.forward);
} }
std::swap(directed, edges);
return directed; return directed;
} }
static std::vector<EdgeBasedGraphEdge> std::vector<EdgeBasedGraphEdge>
PrepareEdgesForUsageInGraph(std::vector<extractor::EdgeBasedEdge> edges) PrepareEdgesForUsageInGraph(std::vector<extractor::EdgeBasedEdge> edges)
{ {
std::sort(begin(edges), end(edges)); std::sort(begin(edges), end(edges));