836 Stimmen

Wie findet man heraus, ob ein Element in einem std::vector vorhanden ist?

Ich möchte lediglich prüfen, ob ein Element im Vektor vorhanden ist oder nicht, damit ich jeden Fall behandeln kann.

if ( item_present )
   do_this();
else
   do_that();

6voto

TrungTN Punkte 2282

Sie können diesen Code ausprobieren:

#include <algorithm>
#include <vector>

// You can use class, struct or primitive data type for Item
struct Item {
    //Some fields
};
typedef std::vector<Item> ItemVector;
typedef ItemVector::iterator ItemIterator;
//...
ItemVector vtItem;
//... (init data for vtItem)
Item itemToFind;
//...

ItemIterator itemItr;
itemItr = std::find(vtItem.begin(), vtItem.end(), itemToFind);
if (itemItr != vtItem.end()) {
    // Item found
    // doThis()
}
else {
    // Item not found
    // doThat()
}

5voto

TankorSmash Punkte 11579

Sie können die find Funktion, zu finden in der std Namespace, d.h. std::find . Sie passieren die std::find Funktion die begin y end Iterator aus dem zu durchsuchenden Vektor zusammen mit dem gesuchten Element und vergleichen Sie den resultierenden Iterator mit dem Ende des Vektors, um zu sehen, ob sie übereinstimmen oder nicht.

std::find(vector.begin(), vector.end(), item) != vector.end()

Sie sind auch in der Lage, diesen Iterator zu derefenzieren und ihn wie jeden anderen Iterator zu verwenden.

3voto

user3157855 Punkte 654
template <typename T> bool IsInVector(const T & what, const std::vector<T> & vec)
{
    return std::find(vec.begin(),vec.end(),what)!=vec.end();
}

3voto

Aditya Punkte 183

Sie können auch count verwenden. Es wird die Anzahl der Elemente in einem Vektor zurückgeben.

int t=count(vec.begin(),vec.end(),item);

3voto

Ich persönlich habe in letzter Zeit Vorlagen verwendet, um mehrere Arten von Containern auf einmal zu verarbeiten, anstatt nur mit Vektoren zu arbeiten. Ich fand ein ähnliches Beispiel online (kann mich nicht erinnern, wo), so Kredit geht an wer auch immer ich dieses gestohlen haben. Dieses spezielle Muster scheint auch rohe Arrays zu verarbeiten.

template <typename Container, typename T = typename std::decay<decltype(*std::begin(std::declval<Container>()))>::type>
bool contains(Container && c, T v)
{
    return std::find(std::begin(c), std::end(c), v) != std::end(c);
}

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