2017-07-10 2 views
2
map<int, GCCollectedInfo*>::iterator it_cltd = m_gcColtedInfoMap->find(locatn); 
if (it_cltd != m_gcColtedInfoMap->end()) 
{   
    vector<ObjectID>::iterator findIter = find(it_cltd->second->m_gcCollectedlist2->begin(), it_cltd->second->m_gcCollectedlist2->end(), objectID); 

    if (findIter != it_cltd->second->m_gcCollectedlist2->end()) 
    {} 
} 

J'écris cette ligne de code dans ma méthode de rappel, Probablement ma taille de vecteur est 50000 (plus ou moins). Lorsque j'essaie d'utiliser ce code dans mon application, j'ai plus de temps à charger, ce qui est plus de 20 secondes que la normale. Existe-t-il une autre méthode pour trouver un élément dans un vecteur ou dans une liste?find() méthode temps de recherche- C++

+0

Les données sont triées? – acraig5075

+0

Êtes-vous lié au vecteur ou à la liste? Pouvez-vous changer à quelque chose de différent? – KjMag

+0

La recherche au vecteur est lente (O (n)). Donc, vous cherchez deux fois dans un vecteur pas très petit. Je ne connais pas non plus la complexité de votre opérateur égal. Pour améliorer la vitesse, utilisez un autre conteneur si possible, comme unordered_map –

Répondre

0

Si la recherche est régulière pour chaque mieux puis 50000 trier et utiliser std :: binary_search