std::vector<Trade_route> City::find_sellers_of(Resource res) { std::vector<Trade_route> ret; for (std::map<int,Trade_route>::iterator it = trade_routes.begin(); it != trade_routes.end(); it++) { City* seller = GAME->world->lookup_city_uid(it->first); if (seller) { int avail = seller->get_net_resource_production(res); if (avail > 0) { // Insert into our return vector, sorted by distance. // TODO: Sort by unit price (including overhead)! int dist = it->second.distance; bool found = false; for (int i = 0; !found && i < ret.size(); i++) { if (dist <= ret[i].distance) { found = true; ret.insert( ret.begin() + i, it->second ); } } if (!found) { ret.push_back(it->second); } } // if (avail > 0) } // if (seller) } // for (std::map<int,Trade_route>::iterator it = trade_routes.begin(); ... ) return ret; }