¿Hay una diferencia entre el uso.begin() y end() para std::inserción de std::set?


Si hay alguna diferencia entre it1 e it2?

std::set<sometype> s;

auto it1 = std::inserter(s, s.begin());
auto it2 = std::inserter(s, s.end());

2 answers

En la práctica, no mucho. Si está insertando un gran número de elementos ya en orden en un set vacío, el segundo será algo más rápido, pero eso es todo. std::insert_iterator llama a insert con el iterador; std::set lo interpreta como una pista, e inserta en tiempo constante (en lugar de lg n) si la inserción está inmediatamente antes de la pista. (En realidad, si el set está vacío, creo que ambos harán exactamente lo mismo.)

 31
Author: James Kanze,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-18 18:03:31

De http://www.sgi.com/tech/stl/insert_iterator.html

En el caso de un Contenedor Asociativo Ordenado, sin embargo, el iterador en el constructor insert_iterator es casi irrelevante. Los nuevos elementos no necesariamente formarán un rango contiguo; aparecerán en la ubicación apropiada en el contenedor, en orden ascendente por clave. El orden en el que se insertan solo afecta a la eficiencia: insertar un rango ya ordenado en un Contenedor Asociativo Ordenado es una operación O (N).

 6
Author: zrb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-29 10:41:19