Pseudo Código:¿Cómo puedo encontrar un valor particular en una matriz y devolver su índice?
int arr[ 5 ] = { 4, 1, 3, 2, 6 }, x;
x = find(3).arr ;
x entonces volvería 2.
Pseudo Código:¿Cómo puedo encontrar un valor particular en una matriz y devolver su índice?
int arr[ 5 ] = { 4, 1, 3, 2, 6 }, x;
x = find(3).arr ;
x entonces volvería 2.
La sintaxis que tiene allí para su función no tiene sentido (¿por qué el valor de retorno tiene un miembro llama arr
?).
Para encontrar el índice, use std::distance
y std::find
del encabezado <algorithm>
.
int x = std::distance(arr, std::find(arr, arr + 5, 3));
O puede presentar en una función más genérica:
template <typename Iter>
size_t index_of(Iter first, Iter last, typename const std::iterator_traits<Iter>::value_type& x)
{
size_t i = 0;
while (first != last && *first != x)
++first, ++i;
return i;
}
Aquí, voy a volver la longitud de la secuencia si no se encuentra el valor (lo cual es consistente con la forma en la Algoritmos STL devuelven el último iterador). Dependiendo de su gusto, es posible que desee utilizar alguna otra forma de informe de fallas.
En su caso, usted podría usarlo de esta manera:
size_t x = index_of(arr, arr + 5, 3);
Si la matriz es sin clasificar, tendrá que utilizar linear search.
la respuesta elegante. Utilizar std :: vector y buscar con std :: encontrar
la respuesta simple
utilizar un bucle
La mejor respuesta: use 'std :: find()' en las matrices. – sbi
Esta es una manera muy simple de hacerlo a mano. También podría usar el <algorithm>
, como sugiere Peter.
#include <iostream>
int find(int arr[], int len, int seek)
{
for (int i = 0; i < len; ++i)
{
if (arr[i] == seek) return i;
}
return -1;
}
int main()
{
int arr[ 5 ] = { 4, 1, 3, 2, 6 };
int x = find(arr,5,3);
std::cout << x << std::endl;
}
#include <vector>
#include <algorithm>
int main()
{
int arr[5] = {4, 1, 3, 2, 6};
int x = -1;
std::vector<int> testVector(arr, arr + sizeof(arr)/sizeof(int));
std::vector<int>::iterator it = std::find(testVector.begin(), testVector.end(), 3);
if (it != testVector.end())
{
x = it - testVector.begin();
}
return 0;
}
O puede simplemente construir un vector de una manera normal, sin crear desde una matriz de enteros y luego usar la misma solución que se muestra en mi ejemplo.
int arr[5] = {4, 1, 3, 2, 6};
vector<int> vec;
int i =0;
int no_to_be_found;
cin >> no_to_be_found;
while(i != 4)
{
vec.push_back(arr[i]);
i++;
}
cout << find(vec.begin(),vec.end(),no_to_be_found) - vec.begin();
Agregue algunas explicaciones a su respuesta para que sea más útil para otros lectores. –
Aquí utilizamos simplemente búsqueda lineal. Al principio, inicialice el índice igual a -1. Luego busque en la matriz, si la encuentra, asigne el valor del índice en la variable de índice y corte. De lo contrario, índice = -1.
int find(int arr[], int n, int key)
{
int index = -1;
for(int i=0; i<n; i++)
{
if(arr[i]==key)
{
index=i;
break;
}
}
return index;
}
int main()
{
int arr[ 5 ] = { 4, 1, 3, 2, 6 };
int n = sizeof(arr)/sizeof(arr[0]);
int x = find(arr ,n, 3);
cout<<x<<endl;
return 0;
}
El índice probablemente sea un tipo sin signo como mínimo. – GManNickG
¿Estás seguro de que deseas usar el índice? Probablemente sería mejor usar alguna forma de iterador. –
Si no se encuentra el valor buscado, ¿qué valor de retorno desea? – Arun