Как “правильнее” работать с QMap C++

199
25 июля 2017, 19:07

Как лучше писать так:

auto it = labels_map["Level"] = new QLabel();
it->setText("Уровень: " + QString::number(player->get_level()));
grid_layout->addWidget(it,0,0);
it = labels_map["Exp"] = new QLabel();
it->setText("Опыт: " + QString::number(player->get_xp()) + "/" + 
QString::number(player->get_xp_for_next_lvl()));
grid_layout->addWidget(it,1,0);

или так:

labels_map["Level"] = new QLabel();
labels_map["Level"]->setText("Уровень: " + QString::number(player-
>get_level()));
grid_layout->addWidget(labels_map["Level"],0,0);
labels_map["Exp"] = new QLabel();
labels_map["Exp"]->setText("Опыт: " + QString::number(player->get_xp()) + 
"/" + QString::number(player->get_xp_for_next_lvl()));
grid_layout->addWidget(labels_map["Exp"],1,0);

или разницы особой нет и можно писать как мне удобнее?

Answer 1

Каждый раз когда вы используете оператор [] происходит поиск элемента в контейнере. Его сложность для QMap O(log n). На вашем месте я бы писал так:

QLabel *label = new QLabel();
label ->setText("Text");
layout->addWidget(label, 0, 0);
QMap["Level"] = label;

С остальными оценками сложности можете ознакомиться здесь

READ ALSO
class Point c++

class Point c++

Существует ли класс или структура Point (точка) в stl или её аналог?

252
Как написать InputIterator?

Как написать InputIterator?

Есть некоторый генератор, который выдает значенияЕго интерфейс описывается тремя функциями:

277
Как получит HWND окна при наведении на него курсора мыши?

Как получит HWND окна при наведении на него курсора мыши?

Как получить HWND окна при наведении на него курсора мыши С++ WinApi32 или Qt?

233
Почему строковый литерал в С++ это l-value?

Почему строковый литерал в С++ это l-value?

Например строковый литерал: "Hello, world!" не может стоять слева от оператора присваиванияТогда, как он может являться леводопустимым выражением?

296