Контейнеры Qt быстрее добавляет элементы чем std, но медленнее получает. Сравнение тест

Решил сравнить скорости добавления и получения данных векторов и хеш-таблиц между версиями Qt и std. Интересно то, что контейнеры Qt быстрее добавляют, в случае с QHash добавление происходит почти в 2 раза быстрее чем в unordered_map. Однако получение элементов из std все же быстрее, результаты такие. Всегда ли std контейнеры медленнее на добавление?

----- START ---------------------- 
stdVec emplace:      303
QVector insert:      287
VecStd []:       99
QVector []:      185
unordered_map insert:    1127
unordered_map emplace:   1028
QHash insert:        652
unordered_map at():  477
QHash value():       540
QHash []:            560
insert std string:   401
insert QString:      421 

UPD: в релизе с оптимизацией -О2:

   ----- START ---------------------- 
stdVec emplace:      101
QVector insert:      102
VecStd []:       17
QVector []:      18
unordered_map insert:    258
unordered_map emplace:   246
QHash insert:        290
unordered_map at():  95
QHash value():       293
QHash []:        290
insert std string:   310
insert QString:      237

код:

qDebug() << "----- START ---------------------- " ;
std::vector<std::function<void(MainWindow&)>> vecStd;
QVector<std::function<void(MainWindow&)>> vecQt;
std::unordered_map<std::string, std::function<void(MainWindow&)>> mapStd;
QHash<QString, std::function<void(MainWindow&)>> mapQhash;

std::function<void(MainWindow&)> f1 = &MainWindow::on_pushButton_Iridium_clicked;
std::function<void(MainWindow&)> f2 = &MainWindow::on_pushButton_Set_clicked;
std::function<void(MainWindow&)> f3 = &MainWindow::on_pushButton_Thuraya_clicked;
std::function<void(MainWindow&)> f4 = &MainWindow::on_pushButton_Inmarsat_clicked;
auto start = std::clock();
for(int i = 0; i < 1000000; i++)
{
    vecStd.emplace_back(f1);
    vecStd.emplace_back(f2);
    vecStd.emplace_back(f3);
    vecStd.emplace_back(f4);
}

auto stop = std::clock();
auto dif = stop - start;
qDebug() << "stdVec emplace:\t\t" << dif;

start = std::clock();
for(int i = 0; i < 1000000; i++)
{
    vecQt.push_back(f1);
    vecQt.push_back(f2);
    vecQt.push_back(f3);
    vecQt.push_back(f4);
}
stop = std::clock();
dif = stop - start;
qDebug() << "QVector insert:\t\t" << dif;

start = std::clock();
for(int i = 0; i < 1000000; i++)
{
    auto res1 = vecStd[0];
    auto res2 = vecStd[1];
    auto res3 = vecStd[2];
    auto res4 = vecStd[3];
}
stop = std::clock();
dif = stop - start;
qDebug() << "VecStd []:\t\t" << dif;

start = std::clock();
for(int i = 0; i < 1000000; i++)
{
    auto res1 = vecQt[0];
    auto res2 = vecQt[1];
    auto res3 = vecQt[2];
    auto res4 = vecQt[3];
}
stop = std::clock();
dif = stop - start;
qDebug() << "QVector []:\t\t" << dif;

start = std::clock();
for(int i = 0; i < 1000000; i++)
{
    mapStd.insert({"f1", f1});
    mapStd.insert({"f2", f2});
    mapStd.insert({"f3", f3});
    mapStd.insert({"f4", f4});
}
stop = std::clock();
dif = stop - start;
qDebug() << "unordered_map insert:\t" << dif;

start = std::clock();
for(int i = 0; i < 1000000; i++)
{
    mapStd.emplace("f1", f1);
    mapStd.emplace("f2", f2);
    mapStd.emplace("f3", f3);
    mapStd.emplace("f4", f4);
}
stop = std::clock();
dif = stop - start;
qDebug() << "unordered_map emplace:\t" << dif;

start = std::clock();
for(int i = 0; i < 1000000; i++)
{
    mapQhash.insert("f1", f1);
    mapQhash.insert("f2", f2);
    mapQhash.insert("f3", f3);
    mapQhash.insert("f4", f4);
}
stop = std::clock();
dif = stop - start;
qDebug() << "QHash insert:\t\t" << dif;

start = std::clock();
for(int i = 0; i < 1000000; i++)
{
    auto res1 = mapStd.at("f1");
    auto res2 = mapStd.at("f2");
    auto res3 = mapStd.at("f3");
    auto res4 = mapStd.at("f4");
}
stop = std::clock();
dif = stop - start;
qDebug() << "unordered_map at():\t" << dif;

start = std::clock();
for(int i = 0; i < 1000000; i++)
{
    auto res1 = mapQhash.value("f1");
    auto res2 = mapQhash.value("f2");
    auto res3 = mapQhash.value("f3");
    auto res4 = mapQhash.value("f4");
}
stop = std::clock();
dif = stop - start;
qDebug() << "QHash value():\t\t" << dif;

start = std::clock();
for(int i = 0; i < 1000000; i++)
{
    auto res1 = mapQhash["f1"];
    auto res2 = mapQhash["f2"];
    auto res3 = mapQhash["f3"];
    auto res4 = mapQhash["f4"];
}
stop = std::clock();
dif = stop - start;
qDebug() << "QHash []:\t\t" << dif;


//QVector<std::string> qvecStd;
std::vector<std::string> qvecStd;
start = std::clock();
for(int i = 0; i < 1000000; i++)
{
    std::string s1 = "0123456789abcdef";
    std::string s2 = "0123456789abcdef";
    std::string s3 = "0123456789abcdef";
    qvecStd.emplace_back(s1);
    qvecStd.emplace_back(s2);
    qvecStd.emplace_back(s3);
}
stop = std::clock();
dif = stop - start;
qDebug() << "insert std string:\t" << dif;

std::vector<QString> qvecQString;
start = std::clock();
for(int i = 0; i < 1000000; i++)
{
    QString s1 = "0123456789abcdef";
    QString s2 = "0123456789abcdef";
    QString s3 = "0123456789abcdef";
    qvecQString.emplace_back(s1);
    qvecQString.emplace_back(s2);
    qvecQString.emplace_back(s3);
}
stop = std::clock();
dif = stop - start;
qDebug() << "insert QString:\t\t" << dif;

Ответы (0 шт):