if und log. Verknüpfungen
-
Was ist effektiver(schneller):
a)
if (kWort == "Milch")
{
...
}
if (kWort == "Butter")
{
...
}
if (kWort == "Schokolade")
{
...
}oder:
b)if (kWort == "Milch" || kWort == "Butter" || kWort == "Schokolade")
{
...
}Danke!
P.S.: Ich habe bestimmt unter 2000 if-Abfragen fast 100 kWort'e, die so zusammengefaßt werden müßten. Gibt es bei b) dann Performance-Probleme, wenn die Zeile dann aus 100 kWort-Oder-Verknüpfungen besteht?
-
Wenn du bei allen Wörtern das gleich machen willst, das zweite.
Weil das Logische Oder solange ausgewertet wird, bis ein Vergleich Wahr ergibt
und bricht dan den ganzen Vergleich mit Wahr ab.
-
Danke für die schnelle Antwort!
Zusatzfrage:
Ist es nun in Ordnung, wenn ich 100 kWort-Oder-Vergleiche in dieser einen Zeile habe?
-
Oder gibt es eine elegantere Lösung?
Danke
-
Also legal ist es, aber dann wünsche ich dir viel Spaß beim scrollen.
Du könntest aber noch ca. 4 Vergleichen nen Zeilumbruch machen:if(kwort == "Milch" || kwort == "Butter" || kwort == "Schokolade" || kwort == "Kase" ...)
Du köntest aber auch alle Wörter in einer Datei speichern, dann in einen Vektor
einlesen und dann vergleichen.Pseudocode:
std::string Wort; std::vector<std::string> WörterListe; while(getline(Datei,Wort)) WörterListe.push_back(Wort); for(std::vector<std::string>::iterator Iter = WörterListe.begin(); Iter != WörterListe.end(); ++Iter) { if(kwort == *Iter) //hier code einsetzen }
-
Danke! Habe verstanden.
-
wenn irgendwo massig vergleiche vorkommen, ist meist eine map angebracht, in der man dann gleich die reaktionen speichert.
eine oder verknuepfung wuerde da so aussehen, dass einfach bei allen betreffenden woertern der gleiche funktionspointer oder so als value gespeichert wird.
dann wird aus dem ganzen fetten verglich ein simplesmap[kWort]();