Si tengo un std::vector<int>
, puedo obtener el índice del elemento mínimo restando dos iteradores:Índice de elemento mínimo en un std :: lista
int min_index = std::min_element(vec.begin(), vec.end()) - vec.begin();
Sin embargo, con los envases que no tienen al azar iteradores de acceso, por ejemplo, std::list<int>
, esto no funciona. Claro, es posible hacer algo como
int min_index = std::difference(l.begin(), std::min_element(l.begin(), l.end()));
pero luego tengo que repetir dos veces en la lista.
¿Puedo obtener el índice del elemento con el valor mínimo con algoritmos STL solo iterando una vez a través de la lista o tengo que codificar mi propio for-loop?
¿Por qué necesita el índice de un elemento en un 'std :: list'? –
Puede escribir un iterador que envuelve 'list :: iterator' y realiza un seguimiento de su índice a medida que avanza. Tendría un uso limitado, ya que insertar/eliminar elementos del contenedor invalidaría los índices almacenados en sus iteradores, pero podría usar 'min_element' y otros algoritmos en él, y luego sacar el índice del valor de retorno. –
Puede usar 'std :: set' u ordenar su contenedor y saber siempre dónde está el elemento mínimo ... – AJG85