мне нужно Somthing, похожего на QSet, но мне нужен элементы, которые будут сохранены в порядке, я вставил ихQT контейнер с указанным порядком и не повторы
есть такая вещь?
мне нужно Somthing, похожего на QSet, но мне нужен элементы, которые будут сохранены в порядке, я вставил ихQT контейнер с указанным порядком и не повторы
есть такая вещь?
Возможно, QList или QVector могут помочь.
QList<QString> stringList;
//By the way, Qt provides QStringList as a typedef for QList<QString>
stringList.append("A");
stringList.append("B");
qDebug() << stringList.at(0); //A
qDebug() << stringList.at(1); //B
Я не знаю ничего подобного из коробки ни Qt, ни STL. У Boost есть что-то вроде этого, я думаю, но это не так сложно сделать самому.
Вы можете сделать обертку вокруг QHash
так:
template<typename T>
class MySet : QHash<T, int>
{
public:
using QHash<T, int>::QHash;
QVector<T> values() //this 'hides' the base QHash::values() of QHash
{
QVector<T> vec(count());
for(auto it = cbegin(); it != end(); ++it)
{
vec[it.value()] = it.key();
}
return vec;
}
void insert(const T &value)
{
if(!contains(value))
{
insert(value, m_Data.count());
}
}
};
Использование очень похож на QSet
:
MySet<QString> set;
set.insert("1");
set.insert("2");
set.insert("3");
qDebug() << set.values();
И печатает значения в порядке. Если вам нужно больше complete
поддержка, например, итераторы, также выполняющие итерирование в желаемом порядке, вам придется переопределить больше функциональности, но суть этого будет одинаковой. В конце концов QSet
находится внутри QHash
. Обратите внимание, что вышеизложенное не поддерживает удаление без изменений.
Недостаточно информации для ответа: какие типы элементов вы используете, как вы хотите вставлять и получать к ним доступ ... Это может быть любой из следующих контейнеров: [QMap] (http: //doc.qt. io/qt-5/qmap.html), [QHash] (http://doc.qt.io/qt-5/qhash.html#qhash), [QVector] (http://doc.qt.io/ qt-5/qvector.html), [QList] (http://doc.qt.io/qt-5/qlist.html) и т. д. См. [Qt Container Classes] (http: //doc.qt .io/qt-5/container.html) –
@VladimirBershov - упомянутые вами контейнеры либо с повторениями, либо не сохраняют предметы по заказу, который я им вставлял. – kakush
Почему не просто [QVector :: append()] (http://doc.qt.io/qt-5/qvector.html#append) или [insert()] (http://doc.qt.io/ кварты-5/qvector.html # вставка)? –