375 Stimmen

prüfen, ob ein std::vector ein bestimmtes Objekt enthält?

Gibt es etwas in <algorithm> mit dem Sie prüfen können, ob ein std:: Container etwas enthält? Oder eine Möglichkeit, einen zu erstellen, zum Beispiel:

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

return false;

Kann dies nur mit std::map da es Schlüssel verwendet?

Gracias

707voto

You Punkte 21563

Prüfen, ob v enthält das Element x :

#include <algorithm>

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

Prüfen, ob v enthält Elemente (ist nicht leer):

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

140voto

AshleysBrain Punkte 21511

Wenn die Suche nach einem Element wichtig ist, würde ich empfehlen std::set anstelle von std::vector . Mit diesem:

std::find(vec.begin(), vec.end(), x) läuft in O(n)-Zeit, aber std::set hat seine eigene find() Mitglied (d. h. myset.find(x) ), die in O(log n)-Zeit läuft - das ist bei einer großen Anzahl von Elementen viel effizienter

std::set garantiert auch, dass alle hinzugefügten Elemente eindeutig sind, was Ihnen erspart, etwas wie if not contained then push_back()... .

15voto

NeilDurant Punkte 1932

Siehe Frage: Wie findet man ein Element in einem std::vector?

Sie müssen auch sicherstellen, dass Sie eine geeignete operator==() für Ihr Objekt, wenn der Standardwert für einen "tiefen" Gleichheitstest nicht ausreichend ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X