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

246
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 или её аналог?

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

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

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

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

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

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

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

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

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

345