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