Я часто встречаю подобный код:QMap :: содержит() VS QMap :: найти()
if(myQMap.contains("my key")){
myValue = myQMap["my key"];
}
который теоретически выполняет два просмотровых находится в QMap.
Моя первая реакция является то, что она должна быть заменена следующей, которая выполняет один поиск только и должен быть в два раза быстрее:
auto it = myQMap.find("my key");
if(it != myQMap.end()){
myValue = it.value();
}
мне интересно, если QMap делает эту оптимизацию автоматически для меня? Другими словами, мне интересно, сохраняет ли QMap позицию последнего элемента, найденного с помощью QMap :: contains(), и проверяет его прежде, чем выполнить следующий поиск?
Спасибо!
Уверен, что это не так. Вы можете использовать ту же самую константу QMap из нескольких потоков, что может вызвать серьезные проблемы, если она кэширует что-либо (и даже в лучшем кэшировании будет работать только для одного потока) – BeniBela
Вот исходный код 'QMap': https: // qt .gitorious.org/qt/qt/source/57756e72adf2081137b97f0e689dd16c770d10b1: src/corelib/tools/qmap.h его нетривиально читать, но он должен помочь вам получить ответ, если вы действительно этого хотите. – Yakk
@BeniBela Я бы ожидал, что в большинстве случаев QMap будет доступен из одного потока, поэтому, если оптимизация работает только для одного потока, все равно стоит его реализовать. – nbilal