Вставка элементов в QSet <QString>и извлечение, удаление последнего элемента QSet - PullRequest
0 голосов
/ 04 мая 2018

У меня есть следующий набор данных:

 QSet<QString> set;

Я попытался вставить 3 элемента в QSet.

set.insert("A");
set.insert("B");
set.insert("C");

После добавления трех вышеупомянутых элементов, он показывает размер моего QSet как 3, но всего видно 16 элементов, среди которых 13 элементов отображаются как пустые. И каждый раз, когда я пытаюсь это отладить, элемент «A» находится в верхней части списка один раз, а в следующий раз «C» появляется в верхней части списка.

Из-за этого я не могу получить последний элемент QSet. I want to retrieve the element,which is inserted at the last to the QSet.

Я использую следующие строки кода для извлечения и удаления элементов из QSet.

QString str1 = QString( *( set.end() - 1 ) ); //to get the last element

set.remove( *( set.end() - 1 ) ); //to remove the last element

Я думаю, что это должно что-то делать с правильной инициализацией моего QSet, но я все еще не мог точно выяснить проблему

Я был бы рад, если бы кто-то мог объяснить мне лучше Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

QSet не хранит свои элементы в каком-либо определенном порядке. Как вы заметили, без определенного порядка даже не стабильно между запусками вашей программы. В очень реальном смысле, не является «последним элементом», поэтому нет front или back члена

Порядок вставки нигде не записывается. Если вы хотите сохранить порядок вставки, вам потребуется SequenceContainer , например std::vector или QVector.

0 голосов
/ 04 мая 2018

QSet основан на хэш-таблице и поэтому неупорядочен. Используйте QMap, если вам нужно упорядочить по ключу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...