La biblioteca algorithm de C++: sort, find, count
Aprende la biblioteca algorithm de C++, incluyendo sort, find, count y otros algoritmos STL para procesar datos eficientemente.
La biblioteca C++ <algorithm> ofrece funciones potentes y muy utilizadas para trabajar de forma eficiente con vectores y otros contenedores de la STL. En este artículo se explican tres de las funciones más comunes: sort, find y count, cada una acompañada de ejemplos prácticos.
1) La función sort
std::sort ordena un rango (como un vector o un arreglo) en orden ascendente por defecto. Su complejidad promedio es de O(n log n).
Uso básico
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
int main() {
vector<int> v = {30, 10, 40, 20};
sort(v.begin(), v.end());
for (int n : v)
cout << n << " ";
}
Salida: 10 20 30 40
Orden descendente
sort(v.begin(), v.end(), greater<int>());
Comparador personalizado
sort(v.begin(), v.end(), [](int a, int b) {
return a % 10 < b % 10; // ordenar por el último dígito
});
2) La función find
std::find busca un valor dentro de un rango y devuelve un iterador
a la primera coincidencia.
Si el valor no se encuentra, devuelve el iterador end().
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
int main() {
vector<int> v = {10, 20, 30, 40};
auto it = find(v.begin(), v.end(), 30);
if (it != v.end())
cout << "Encontrado: " << *it;
else
cout << "No encontrado";
}
Búsqueda en un vector de cadenas
vector<string> names = {"Alicia", "Emma", "Juan"};
auto it = find(names.begin(), names.end(), "Emma");
3) La función count
std::count permite contar cuántas veces aparece un valor específico dentro de un rango.
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
int main() {
vector<int> v = {10, 20, 20, 30, 20};
int c = count(v.begin(), v.end(), 20);
cout << "Número de 20: " << c;
}
Salida: Número de 20: 3
Conteo condicional (count_if)
int c = count_if(v.begin(), v.end(), [](int x) {
return x % 2 == 0; // contar números pares
});
4) Ejemplo práctico — Conteo de palabras
#include <algorithm>
#include <vector>
#include <string>
#include <iostream>
using namespace std;
int main() {
vector<string> words = {"cpp", "java", "cpp", "python", "cpp"};
int cppCount = count(words.begin(), words.end(), "cpp");
cout << "\"cpp\" aparece " << cppCount << " veces";
}
5) Uso combinado de sort, find y count
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
int main() {
vector<int> v = {50, 20, 10, 20, 40};
sort(v.begin(), v.end()); // 10 20 20 40 50
auto it = find(v.begin(), v.end(), 20); // primera aparición de 20
int c = count(v.begin(), v.end(), 20); // contar los 20
cout << "Primer 20 encontrado en el índice: " << (it - v.begin()) << endl;
cout << "Total de 20: " << c;
}
6) ¿Cuándo usar cada una?
- sort: para cualquier tipo de ordenamiento
- find: para localizar rápidamente un valor
- count: para contar cuántas veces aparece un valor
La biblioteca <algorithm> es una de las herramientas más potentes de la STL para realizar operaciones eficientes sobre contenedores.
7) TL;DR
- sort: función de ordenamiento O(n log n)
- find: busca un valor y devuelve un iterador
- count: cuenta cuántas veces aparece un valor
- count_if: cuenta según una condición
- Ejemplos compatibles con Visual Studio 2022 y GCC.
Artículos relacionados
Elementos únicos con std::set y std::multiset en C++
Aprende a utilizar std::set y std::multiset en C++ para trabajar con elementos únicos y colecciones ordenadas.
Iteradores y su uso en la STL de C++
Aprende los iteradores en C++ y su uso con contenedores y algoritmos STL para recorrer y manipular datos de forma eficiente.
Uso de std::vector en C++
Aprende a utilizar std::vector en C++ para trabajar con arreglos dinámicos y gestionar datos de forma eficiente.
Visión general de la biblioteca estándar de C++
Aprende la biblioteca estándar de C++, incluyendo contenedores STL, algoritmos y componentes esenciales del desarrollo moderno.