void shortestDistance(const graph & cityMap,
const string & start, stringVector & distances)
{
// process a priority queue of distances to cities
priority_queue<DistancePair, vector<DistancePair> ,
greater<DistancePair> > que;
que.push(DistancePair(0, start));
while (! que.empty()) {
// pull nearest city from queue
int distance = que.top().first;
string city = que.top().second;
que.pop();
// if we haven't seen it already, process it
if (0 == distances.count(city)) {
// then add it to shortest distance map
distances[city] = distance;
// and put values into queue
stringVector::iterator start, stop;
start = cityMap[city].begin();
stop = cityMap[city].end();
for (; start != stop; ++start)
que.push(DistancePair(distance + (*start).second,
(*start).first));
}
}
}