Gestern hatte ich das Glück, eine Frage zu sehen, die für eine kurze Zeit existierte und gelöscht wurde, während ich eine Antwort darauf schrieb (ich denke, dass die Frage vom Autor gelöscht wurde, der von Kommentatoren überzeugt war, dass sein Ihr Vorschlag machte keinen Sinn. Ich formuliere diese Frage etwas allgemeiner und gebe meine Antwort darauf. Andere Ideen und/oder Hinweise auf bestehende Implementierungen meiner Idee (die ich nicht schnell finden konnte) sind ebenfalls willkommen.Wie vereinfacht man die Überprüfung, ob ein von einem Suchalgorithmus zurückgegebener Iterator gültig ist?
Das Folgende ist ein ziemlich häufiges Muster einer Suchoperation der Verwendung (siehe unten Beispiel wird die Elementfunktion find()
von std::map
, aber es kann auch über den std::find
oder std::lower_bound
Algorithmen neu geschrieben werden):
const auto it = map.find(key); // 1
if (it != map.end()) // 2
{
do something with it
}
obwohl das Muster ziemlich kurz sieht, kann der Code mehr überladen werden, wenn das Kartenobjekt einen wesentlich längeren Namen hat oder wie unten durch einen komplexen Ausdruck verwiesen:
const auto it = p->getMappingFor(currentConfig()->whatever()).find(key);
Gibt es eine Möglichkeit, die Zeilen 1 und 2 im obigen Beispiel in eins zusammenzufassen und das Kartenobjekt nur einmal referenzieren zu lassen?
EDIT 1:
Die Motivation zur Vereinfachung dieses Suchen und überprüfen Muster ist ähnlich dem, der als eine bequemere Form des traditional for
loop auf die Erscheinung des range-based for
loop geführt.
Verwenden Sie Bereiche anstelle von Iteratoren. – lorro