From 0fb79a8f15f97fcfd38bb7a7063fac5d44341a71 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Thu, 26 Nov 2015 18:23:10 +0000 Subject: [PATCH] Use a flat vector instead of a map in FlowEdgeIterator. This reduced the cost of Dijkstra by approx. 25%, in a test profiling. --- src/linkgraph/mcf.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/linkgraph/mcf.cpp b/src/linkgraph/mcf.cpp index 10296575c0..ecdf792afe 100644 --- a/src/linkgraph/mcf.cpp +++ b/src/linkgraph/mcf.cpp @@ -136,7 +136,7 @@ private: LinkGraphJob &job; ///< Link graph job we're working with. /** Lookup table for getting NodeIDs from StationIDs. */ - std::map station_to_node; + std::vector station_to_node; /** Current iterator in the shares map. */ FlowStat::SharesMap::const_iterator it; @@ -152,7 +152,11 @@ public: FlowEdgeIterator(LinkGraphJob &job) : job(job) { for (NodeID i = 0; i < job.Size(); ++i) { - this->station_to_node[job[i].Station()] = i; + StationID st = job[i].Station(); + if (st >= this->station_to_node.size()) { + this->station_to_node.resize(st + 1); + } + this->station_to_node[st] = i; } }