Tengo un vector de unordered_map que se ordena en función de la función del comparador que he definido. Me gustaría usar la búsqueda binaria para buscar uno de los valores usando también la función del comparador. Sin embargo, la búsqueda binaria solo devuelve bool y necesito el índice/iterador del resultado. ¿Qué puedo hacer?Búsqueda binaria C++ STL
Respuesta
#include <algorithm>
using namespace std;
//!!!!! a must be sorted using cmp. Question indicates that it is.
it = lower_bound(a.begin, a.end(), value, cmp);
//Check that we have actually found the value.
//If the requested value is missing
//then we will have the value before where the requested value
//would be inserted.
if(it == a.end() || !cmp(*it, value))
{
//element not found
}
else
{
//element found
}
#include <algorithm>
using namespace std;
it = lower_bound(a.begin, a.end(), value, cmp);
+1 o posiblemente upper_bound o equal_range –
-1 LOWER_BOUND no necesariamente devolver el elemento. Si el elemento falta, devolverá el elemento antes de que estuviera si estuviera en el vector. – T33C
es aconsejable usar lower_bound. Tome el iterador, verifique si es eliminable. Si es así, desreferenciarlo y verificar con el elemento buscado. Si es el elemento, lo tienes, de lo contrario no está allí. –
- 1. Búsqueda binaria genérica en C#
- 2. búsqueda binaria vs árbol de búsqueda binaria
- 3. Compatibilidad binaria de contenedores STL
- 4. árbol de búsqueda binaria en C# Implementación
- 5. Árbol de búsqueda binaria en C
- 6. comparar Hash con árbol de búsqueda binaria
- 7. Búsqueda binaria en matriz
- 8. Problemas de búsqueda binaria?
- 9. Búsqueda binaria sin sucursales
- 10. búsqueda binaria Árbol Transversal - preorden
- 11. Implementar búsqueda binaria en objetos
- 12. Implementando un árbol de búsqueda binaria equilibrado?
- 13. ¿Hay una búsqueda binaria incorporada en Ruby?
- 14. Tiempos de búsqueda para el árbol de búsqueda binaria
- 15. Encontrando altura en Árbol de búsqueda binaria
- 16. búsqueda binaria en una matriz en Perl
- 17. ¿Por qué los árboles de búsqueda binaria?
- 18. Búsqueda binaria en clojure (implementación/rendimiento)
- 19. javascript implementación del árbol de búsqueda binaria
- 20. Búsqueda binaria en D 2.0 (Phobos)?
- 21. Creación de árboles de búsqueda binaria
- 22. constante binaria C++/literal
- 23. Búsqueda binaria en Erlang en lg (n) tiempo
- 24. C equivalente de C++ STL
- 25. C++ sin STL
- 26. RAII y C++ STL
- 27. C++ Pregunta STL: asignadores
- 28. C error STL ++ quitar
- 29. C++: STL multimap.equal_range()
- 30. C Analógico a STL
lower_bound parece ser mucho más lento que el simple "cualquier valor coincidente". Supongamos {1,2,3,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,6,7}. El centro es 5 - un valor buscado. Pero lower_bound irá a la izquierda. Es inóptimo. Supongo que la solución O (Log (N)) para encontrar el límite izquierdo. Pero es un exceso. Estoy muy molesto por esto. Sin embargo, hay una función C :: bsearch. – cppist
'! Cmp (* it, value)' siempre es verdadero si 'it! = A.end()'. Deberías invertir los argumentos. – Ruslan