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::map
omdat het sleutels gebruikt?
Bedankt
Antwoord 1, autoriteit 100%
Controleren of v
het element x
bevat:
#include <algorithm>
if(std::find(v.begin(), v.end(), x) != v.end()) {
/* v contains x */
} else {
/* v does not contain x */
}
Controleren of v
elementen 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::set
aan in plaats van std::vector
. Dit gebruiken:
std::find(vec.begin(), vec.end(), x)
draait in O(n) tijd, maar std::set
heeft 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::set
garandeert 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>