2017-01-08 10 views
1

мне нужно Somthing, похожего на QSet, но мне нужен элементы, которые будут сохранены в порядке, я вставил ихQT контейнер с указанным порядком и не повторы

есть такая вещь?

+0

Недостаточно информации для ответа: какие типы элементов вы используете, как вы хотите вставлять и получать к ним доступ ... Это может быть любой из следующих контейнеров: [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) –

+0

@VladimirBershov - упомянутые вами контейнеры либо с повторениями, либо не сохраняют предметы по заказу, который я им вставлял. – kakush

+0

Почему не просто [QVector :: append()] (http://doc.qt.io/qt-5/qvector.html#append) или [insert()] (http://doc.qt.io/ кварты-5/qvector.html # вставка)? –

ответ

-1

Возможно, 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 
0

Я не знаю ничего подобного из коробки ни 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. Обратите внимание, что вышеизложенное не поддерживает удаление без изменений.

 Смежные вопросы

  • Нет связанных вопросов^_^