Encuentre el índice de elementos en Vector en C++

Jinku Hu 12 octubre 2023
  1. Utilice la función personalizada para encontrar el índice de elementos en Vector en C++
  2. Utilice el algoritmo std::find para encontrar el índice de elementos en un vector en C++
  3. Utilice el algoritmo std::find_if para encontrar el índice de elementos en un vector en C++
Encuentre el índice de elementos en Vector en C++

Este artículo explicará varios métodos de cómo encontrar el índice de elementos en un vector en C++.

Utilice la función personalizada para encontrar el índice de elementos en Vector en C++

Podemos utilizar una función de búsqueda lineal personalizada para encontrar la posición del elemento dado en el vector. Tenga en cuenta que este es un método bastante ineficaz para resolver este problema. En el siguiente código de ejemplo, declaramos un vector de números enteros y buscamos una posición de elemento arbitraria, que generamos si la llamada es exitosa.

#include <iostream>
#include <string>
#include <vector>

using std::cerr;
using std::cout;
using std::endl;
using std::string;
using std::vector;

int findIndex(const vector<int> &arr, int item) {
  for (auto i = 0; i < arr.size(); ++i) {
    if (arr[i] == item) return i;
  }

  return -1;
}

int main(int argc, char *argv[]) {
  vector<int> arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

  auto pos = findIndex(arr, 32);
  pos != -1
      ? cout << "Found the element " << 32 << " at position " << pos << endl
      : cout << "Could not found the element " << 32 << " in vector" << endl;

  exit(EXIT_SUCCESS);
}

Producción :

Could not found the element 32 in vector

Utilice el algoritmo std::find para encontrar el índice de elementos en un vector en C++

Alternativamente, podemos usar el algoritmo std::find que es parte de la biblioteca STL. Esta función devuelve el iterador al primer elemento que satisface la condición. Por otro lado, si no se encuentra ningún elemento, el algoritmo devuelve el último elemento del rango. Sin embargo, tenga en cuenta que el iterador devuelto debe reducirse mediante el iterador begin para calcular la posición.

#include <iostream>
#include <string>
#include <vector>

using std::cerr;
using std::cout;
using std::endl;
using std::string;
using std::vector;

int findIndex2(const vector<int> &arr, int item) {
  auto ret = std::find(arr.begin(), arr.end(), item);

  if (ret != arr.end()) return ret - arr.begin();
  return -1;
}

int main(int argc, char *argv[]) {
  vector<int> arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

  auto pos2 = findIndex2(arr, 10);
  pos2 != -1
      ? cout << "Found the element " << 10 << " at position " << pos2 << endl
      : cout << "Could not found the element " << 10 << " in vector" << endl;

  exit(EXIT_SUCCESS);
}

Producción :

Found the element 10 at position 9

Utilice el algoritmo std::find_if para encontrar el índice de elementos en un vector en C++

Otro método para encontrar el índice del elemento es invocar el algoritmo std::find_if. Es similar a std::find excepto que el tercer argumento puede ser una expresión de predicado para evaluar cada elemento iterado. Si la expresión devuelve verdadero, el algoritmo volverá. Observe que pasamos la expresión lambda como tercer argumento, que comprueba si el elemento es igual a 10.

#include <iostream>
#include <string>
#include <vector>

using std::cerr;
using std::cout;
using std::endl;
using std::string;
using std::vector;

int main(int argc, char *argv[]) {
  vector<int> arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

  auto ret =
      std::find_if(arr.begin(), arr.end(), [](int x) { return x == 10; });

  if (ret != arr.end())
    cout << "Found the element " << 10 << " at position " << ret - arr.begin()
         << endl;

  exit(EXIT_SUCCESS);
}

Producción :

Found the element 10 at position 9
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Artículo relacionado - C++ Vector