Sto cercando di cercare la posizione degli elementi vettoriali in un altro vettore. Qui mi interessa utilizzare un'implementazione veloce come binary search
. Ho diversi vettori di lunghezza 1 milione o più, quindi sto cercando di ottenere qualcosa di più veloce.Ricerca binaria in std :: vector
seguenti situazioni nel mio caso:
1)vector
in cui sto cercando è ordinato.
2) L'elemento Cerco sarà sempre lì cioè non ho un caso di not found
, e vorrei per ottenere l'indice di elementi vettoriali in un modo più veloce.
Ho provato il seguente codice per ottenere l'indice degli elementi vettoriali.
#include <iostream>
#include <vector>
#include <algorithm>
template<class Iter, class T>
Iter binary_find(Iter begin, Iter end, T val)
{
Iter i = std::lower_bound(begin, end, val);
return i;
}
int main() {
std::vector<std::string> values = {"AAAAAA","AB", "AD" ,"BCD","CD", "DD" };
std::vector<std::string> tests = {"AB", "CD","AD", "DD"};
for(int i=0 ; i < tests.size(); i++) {
int pos = binary_find(values.begin(), values.end(), tests.at(i))- values.begin();
std::cout << tests.at(i) << " found at: " << pos <<std::endl;
}
return 0;
}
Vorrei sapere se il codice corrisponde con l'implementazione ricerca binaria. ??
C'è un modo più rapido per ottenere l'indice degli elementi vettoriali?
Eventuali ulteriori suggerimenti per migliorare questo codice.
Se ti ritrovi a fare un sacco di ricerche critiche sul rendimento come questo, potresti voler considerare un contenitore associativo di qualche tipo. – TartanLlama