C++ (Qt)9. QMap/QHash нельзя итерировать в range-for по ключу-значению, что либо заставляет писать говнокод с итераторами, либо говнокод с .keys() и последующим .value(). Ухху!
// c++17std::map<QString, QVariant> map;for (auto&& [key, value]: map) { qDebug() << "key:" << key << "value:" << value;}// qt goodQMap<QString, QVariant> map;for (auto it = map.constBegin(), end = map.constEnd(); it != end; ++it) { qDebug() << "key:" << it.key() << "value:" << it.value();}// qt badQMap<QString, QVariant> map;for (auto&& key: map.keys()) { // ой, аллокация и куча ref/deref строк qDebug() << "key:" << key << "value:" << map.value(key); // ой, поиск за log(N)}// а потом жалуются что "qt тормозит"
// c++17std::map<QString, QVariant> map;for (auto&& [key, value]: map) { qDebug() << "key:" << key << "value:" << value;}
// qt badQMap<QString, QVariant> map;for (auto&& key: map.keys()) { // ой, аллокация и куча ref/deref строк qDebug() << "key:" << key << "value:" << map.value(key); // ой, поиск за log(N)}// а потом жалуются что "qt тормозит"
const Item::PropertyMap &overriddenProperties = propertiesItem->properties();for (Item::PropertyMap::ConstIterator it = overriddenProperties.constBegin(); it != overriddenProperties.constEnd(); ++it) { loadedItem->setProperty(it.key(), overriddenProperties.value(it.key())); }
for (const auto &kv : propertiesItem->properties()) { loadedItem->setProperty(kv.first, kv.second);}