que tienen un código que se parece a esto:std :: inserter con set - insertar para begin() o end()?
std::set<int> s1, s2, out;
// ... s1 and s2 are populated ...
std::set_intersection(s1.begin(), s1.end(),
s2.begin(), s2.end(),
std::inserter(out, out.end()));
He leído inserciones se puede hacer en un tiempo constante amortizado si el valor que se inserta en el conjunto sigue inmediatamente el repetidor dado como un "toque". Obviamente, esto sería beneficioso al ejecutar la intersección establecida, especialmente porque todo lo que se está escribiendo en out
ya está ordenado.
¿Cómo puedo garantizar este rendimiento óptimo? Al crear el std::inserter
, out
está vacío así que out.begin() == out.end()
así que no puedo ver si hay alguna diferencia si especifico out.begin()
o out.end()
como sugerencia. Sin embargo, si esto se interpreta al insertar cada elemento en begin()
, no parece que obtenga el rendimiento algorítmico óptimo. ¿Se puede hacer esto mejor?
@Ahsleys: Al menos al seleccionar 'end' no pesimiza el algoritmo ya que no hay un elemento siguiente (lo que economiza una comparación). Sin embargo, me pregunto (como lo está) si el iterador que pasa evolucionará o se quedará bloqueado al principio/final. –