controleren of een std::vector een bepaald object bevat?

Is er iets in <algorithm>waarmee u kunt controleren of een std::-container iets bevat? Of een manier om er een te maken, bijvoorbeeld:

if(a.x == b.x && a.y == b.y)
return true;
return false;

Kan dit alleen met std::mapomdat het sleutels gebruikt?

Bedankt


Antwoord 1, autoriteit 100%

Controleren of vhet element xbevat:

#include <algorithm>
if(std::find(v.begin(), v.end(), x) != v.end()) {
    /* v contains x */
} else {
    /* v does not contain x */
}

Controleren of velementen bevat (is niet leeg):

if(!v.empty()){
    /* v is non-empty */
} else {
    /* v is empty */
}

Antwoord 2, autoriteit 20%

Als het zoeken naar een element belangrijk is, raad ik std::setaan in plaats van std::vector. Dit gebruiken:

std::find(vec.begin(), vec.end(), x)draait in O(n) tijd, maar std::setheeft zijn eigen find()-lid (dwz myset.find(x)) dat in O(log n)-tijd draait – dat is veel efficiënter met grote aantallen elementen

std::setgarandeert ook dat alle toegevoegde elementen uniek zijn, waardoor u niets hoeft te doen zoals if not contained then push_back()....


Antwoord 3, autoriteit 2%

Zie vraag: Hoe vind je een item in een standaard:: vector?

U moet er ook voor zorgen dat u een geschikte operator==()voor uw object heeft geïmplementeerd, als de standaard niet voldoende is voor een “diepe” gelijkheidstest.

p>

Other episodes