QMap::contains() VS QMap::find()

Sehe ich oft code wie:

if(myQMap.contains("my key")){
    myValue = myQMap["my key"];
}

die theoretisch führt zwei look-up in der QMap.

Meine erste Reaktion ist, dass es ersetzt werden soll, durch die folgenden, führt ein lookup nur und sollte zwei mal schneller:

auto it = myQMap.find("my key");
if(it != myQMap.end()){
    myValue = it.value();
}

Frage ich mich, ob QMap macht diese Optimierung automatisch für mich?
In anderen Worten Frage ich mich, ob QMap speichert die position des letzten Elements gefunden mit QMap::contains() und prüft es zuerst, bevor Sie das nächste lookup?

  • Ziemlich sicher ist es nicht. Sie können die gleiche const QMap, die von mehreren threads verwendet, die würden ernsthafte Schwierigkeiten, wenn es waren caching überhaupt nichts (und selbst in der besten caching würde nur Arbeit für ein thread)
  • Hier ist der Quellcode für QMap: qt.gitorious.org/qt/qt/source/... es ist nicht trivial zu Lesen, aber es sollte Ihnen helfen, eine Antwort zu bekommen, wenn Sie es wirklich wollen.
  • Ich würde erwarten, dass die meisten der Zeit eine QMap zugegriffen wird von einem thread, so dass, wenn die Optimierung funktioniert nur für einen thread ist es trotzdem Wert, es umzusetzen.
InformationsquelleAutor nbilal | 2013-11-13
Schreibe einen Kommentar