68 Stimmen

Überprüfen, ob das Element in der Liste enthalten ist (enthält)

Ich habe eine Liste von Elementen, zum Beispiel Ganzzahlen, und ich möchte überprüfen, ob meine Variable (eine andere Ganzzahl) eines der Elemente aus der Liste ist. In Python würde ich folgendes tun:

my_list = [1,2,3,4] # Elemente
my_var = 3 # meine Variable
my_var in my_list # gibt boolean zurück

Wie mache ich das in C++? Ich dachte daran, std::list zu verwenden, aber ich finde keine find Methode darin. Ich sehe eine solche Methode in der std::set Struktur.

Etwas tiefergehend ist das Problem, dass mein Programm einige eindeutige IDs erhält (eine Liste, ein Set, was auch immer) und ich über eine lange Liste von Eingabedaten (IDs) iteriere und überprüfe, ob sie in der Liste enthalten sind (boolscher Wert wird für jeden Iterationsschritt zurückgegeben). Und ich bin mir nicht sicher, wie ich das in C++ machen soll.

115voto

Matzi Punkte 13600

Sie können std::find verwenden

bool gefunden = (std::find(my_list.begin(), my_list.end(), my_var) != my_list.end());

Sie müssen einbeziehen. Es sollte auf Standardcontainern, Vektoren, Listen usw. funktionieren...

33voto

Rakib Punkte 7545

std::list bietet keine Suchmethode. Sie können über die Liste iterieren und überprüfen, ob das Element vorhanden ist oder std::find verwenden. Aber ich denke, für Ihre Situation ist std::set bevorzugenswerter. Ersteres benötigt O(n) Zeit, letzteres benötigt O(lg(n)) Zeit zum Suchen.

Sie können einfach verwenden:

int my_var = 3;
std::set mySet {1, 2, 3, 4};
if(mySet.find(myVar) != mySet.end()){
      //tue was auch immer
}

9voto

Radu Chivu Punkte 1057

Sie müssen #include einfügen, dann können Sie std::find verwenden

9voto

KungPhoo Punkte 499

Sie sollten wirklich einen Wrapper hinzufügen. So wie hier:

namespace std
{
    template inline
        bool contains(_container _C, const _Ty& _Val)
        {return std::find(_C.begin(), _C.end(), _Val) != _C.end(); }
};
...
    if( std::contains(my_container, what_to_find) )
    {

    }

5voto

Markus Dutschke Punkte 6917

Eine Lösung in einer Zeile, ähnlich wie in Python, wäre (std::set {1, 2, 3, 4}).count(my_var) > 0.

Minimalbeispiel

int my_var = 3;
bool myVarIn = (std::set {1, 2, 3, 4}).count(my_var) > 0;
std::cout << std::boolalpha << myVarIn << std::endl;

gibt true oder false abhängig vom Wert von my_var aus.

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