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();
Sie können verwenden std::find
de <algorithm>
:
#include <algorithm>
#include <vector>
vector<int> vec;
//can have other data types instead of int but must same datatype as item
std::find(vec.begin(), vec.end(), item) != vec.end()
Dies gibt einen Iterator zum ersten gefundenen Element zurück. Ist dies nicht der Fall, wird ein Iterator auf ein Element nach dem Ende zurückgegeben. Mit Ihrem Beispiel:
#include <algorithm>
#include <vector>
if ( std::find(vec.begin(), vec.end(), item) != vec.end() )
do_this();
else
do_that();
Wie andere bereits gesagt haben, verwenden Sie die STL find
o find_if
Funktionen. Wenn Sie jedoch in sehr großen Vektoren suchen und dies die Leistung beeinträchtigt, sollten Sie Ihren Vektor sortieren und dann die Funktion binary_search
, lower_bound
, oder upper_bound
Algorithmen.
Wenn Ihr Vektor nicht geordnet ist, verwenden Sie den von MSN vorgeschlagenen Ansatz:
if(std::find(vector.begin(), vector.end(), item)!=vector.end()){
// Found the item
}
Wenn Ihr Vektor geordnet ist, verwenden Sie binary_search Methode Brian Neal vorgeschlagen:
if(binary_search(vector.begin(), vector.end(), item)){
// Found the item
}
Die binäre Suche führt im schlimmsten Fall zu einer Leistung von O(log n), was wesentlich effizienter ist als der erste Ansatz. Um die binäre Suche zu verwenden, können Sie qsort verwenden, um den Vektor zuerst zu sortieren, damit er geordnet ist.
Verwenden Sie find aus dem Algorithmus-Header von stl. Ich habe seine Verwendung mit dem Typ int illustriert. Sie können jeden beliebigen Typ verwenden, solange Sie auf Gleichheit vergleichen können (überladen Sie ==, wenn Sie es für Ihre benutzerdefinierte Klasse benötigen).
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
typedef vector<int> IntContainer;
typedef IntContainer::iterator IntIterator;
IntContainer vw;
//...
// find 5
IntIterator i = find(vw.begin(), vw.end(), 5);
if (i != vw.end()) {
// found it
} else {
// doesn't exist
}
return 0;
}
In C++11 können Sie any_of
. Wenn es sich zum Beispiel um eine vector<string> v;
dann:
if (any_of(v.begin(), v.end(), bind(equal_to<string>(), _1, item)))
do_this();
else
do_that();
Alternativ können Sie auch ein Lambda verwenden:
if (any_of(v.begin(), v.end(), [&](const std::string& elem) { return elem == item; }))
do_this();
else
do_that();
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.