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();

24voto

Andy Krouwel Punkte 1149

Ich benutze so etwas wie das hier...

#include <algorithm>

template <typename T> 
const bool Contains( std::vector<T>& Vec, const T& Element ) 
{
    if (std::find(Vec.begin(), Vec.end(), Element) != Vec.end())
        return true;

    return false;
}

if (Contains(vector,item))
   blah
else
   blah

...denn so ist es tatsächlich klar und lesbar. (Natürlich können Sie die Vorlage an mehreren Stellen wiederverwenden).

15voto

Martin Broadhurst Punkte 8923

Hier ist eine Funktion, die für jeden Container geeignet ist:

template <class Container> 
const bool contains(const Container& container, const typename Container::value_type& element) 
{
    return std::find(container.begin(), container.end(), element) != container.end();
}

Beachten Sie, dass Sie mit 1 Template-Parameter auskommen können, da Sie die value_type aus dem Container. Sie benötigen die typename denn Container::value_type ist eine abhängiger Name .

11voto

David Thornley Punkte 55244

Denken Sie daran, dass es STL-Container gibt, die dafür besser geeignet sind, wenn Sie viele Suchvorgänge durchführen wollen. Ich weiß nicht, was Ihre Anwendung ist, aber assoziative Container wie std::map kann eine Überlegung wert sein.

std::vector ist der Container der Wahl, es sei denn, Sie haben einen Grund für einen anderen, und Lookups nach Wert kann ein solcher Grund sein.

11voto

Mikhail Punkte 19327

Mit Boost können Sie any_of_equal :

#include <boost/algorithm/cxx11/any_of.hpp>

bool item_present = boost::algorithm::any_of_equal(vector, element);

9voto

Frank Punkte 60769

Verwenden Sie die STL finden. Funktion.

Denken Sie daran, dass es auch eine finden_wenn Funktion, die Sie verwenden können, wenn Ihre Suche komplexer ist, d.h. wenn Sie nicht nur nach einem Element suchen, sondern z.B. sehen wollen, ob es ein Element gibt, das eine bestimmte Bedingung erfüllt, z.B. eine Zeichenkette, die mit "abc" beginnt. ( find_if würde Ihnen einen Iterator liefern, der auf das erste solche Element zeigt).

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