std::pair<NBEdge*, NBEdge*> NBOwnTLDef::getBestPair(EdgeVector& incoming) { if (incoming.size() == 1) { // only one there - return the one std::pair<NBEdge*, NBEdge*> ret(*incoming.begin(), static_cast<NBEdge*>(0)); incoming.clear(); return ret; } // determine the best combination // by priority, first EdgeVector used; std::sort(incoming.begin(), incoming.end(), edge_by_incoming_priority_sorter()); used.push_back(*incoming.begin()); // the first will definitely be used // get the ones with the same priority int prio = getToPrio(*used.begin()); for (EdgeVector::iterator i = incoming.begin() + 1; i != incoming.end() && prio != getToPrio(*i); ++i) { used.push_back(*i); } // if there only lower priorised, use these, too if (used.size() < 2) { used = incoming; } std::pair<NBEdge*, NBEdge*> ret = getBestCombination(used); incoming.erase(find(incoming.begin(), incoming.end(), ret.first)); incoming.erase(find(incoming.begin(), incoming.end(), ret.second)); return ret; }