Viadeo Twitter Google Bookmarks ! Facebook Digg del.icio.us MySpace Yahoo MyWeb Blinklist Netvouz Reddit Simpy StumbleUpon Bookmarks Windows Live Favorites 
Logo Documentation Qt ·  Page d'accueil  ·  Toutes les classes  ·  Classes principales  ·  Annotées  ·  Classes groupées  ·  Modules  ·  Fonctions  · 

QSet Class Reference
[QtCore module]

The QSet class is a template class that provides a hash-table-based set. More...

#include <QSet>

Note: All the functions in this class are reentrant.

Public Types

Public Functions

Static Public Members

  • QSet<T> fromList ( const QList<T> & list )

Related Non-Members

  • QDataStream & operator<< ( QDataStream & out, const QSet<T> & set )
  • QDataStream & operator>> ( QDataStream & in, QSet<T> & set )

Detailed Description

The QSet class is a template class that provides a hash-table-based set.

QSet<T> is one of Qt's generic container classes. It stores values in an unspecified order and provides very fast lookup of the values. Internally, QSet<T> is implemented as a QHash.

Here's an example QSet with QString values:

    QSet<QString> set;

To insert a value into the set, use insert():

    set.insert("one");
    set.insert("three");
    set.insert("seven");

Another way to insert items into the set is to use operator<<():

    set << "twelve" << "fifteen" << "nineteen";

To test whether an item belongs to the set or not, use contains():

    if (!set.contains("ninety-nine"))
        ...

If you want to navigate through all the values stored in a QSet, you can use an iterator. QSet supports both Java-style iterators (QSetIterator) and STL-style iterators (QSet::const_iterator). Here's how to iterate over a QSet<QWidget *> using a Java-style iterator:

    QSetIterator<QWidget *> i(set);
    while (i.hasNext())
        qDebug() << i.next();

Here's the same code, but using an STL-style iterator:

    QSet<QWidget *>::const_iterator i = set.begin();
    while (i != set.end()) {
        qDebug() << *i;
        ++i;
    }

QSet is unordered, so an iterator's sequence cannot be assumed to be predictable. If ordering by key is required, use a QMap.

To navigate through a QSet, you can also use foreach:

    QSet<QString> set;
    ...
    foreach (QString value, set)
        qDebug() << value;

Items can be removed from the set using remove(). There's also a clear() function that removes all items.

QSet's value data type must be an assignable data type. You cannot, for example, store a QWidget as a value; instead, store a QWidget *. In addition, the type must provide operator==(), and there must also be a global qHash() function that returns a hash value for an argument of the key's type. See the QHash documentation for a list of types supported by qHash().

Internally, QSet uses a hash table to perform lookups. The hash table automatically grows and shrinks to provide fast lookups without wasting too much memory. You can still control the size of the hash table by calling reserve() if you already know approximately how many elements the QSet will contain, but this isn't necessary to obtain good performance. You can also call capacity() to retrieve the hash table's size.

See also QSetIterator, QHash, and QMap.


Member Type Documentation

typedef QSet::ConstIterator

Qt-style synonym for QSet::const_iterator.


Member Function Documentation

QSet::QSet ()

Constructs an empty set.

See also clear().

QSet::QSet ( const QSet<T> & other )

Constructs a copy of other.

This operation occurs in constant time, because QSet is implicitly shared. This makes returning a QSet from a function very fast. If a shared instance is modified, it will be copied (copy-on-write), and this takes linear time.

See also operator=().

const_iterator QSet::begin () const

Returns a const STL-style iterator pointing to the first item in the set.

See also end().

int QSet::capacity () const

Returns the number of buckets in the QSet's internal hash table.

The sole purpose of this function is to provide a means of fine tuning QSet's memory usage. In general, you will rarely ever need to call this function. If you want to know how many items are in the set, call size().

See also reserve() and squeeze().

void QSet::clear ()

Removes all elements from the set.

See also remove().

const_iterator QSet::constBegin () const

Same as begin(). Provided for consistency with other container classes.

See also constEnd().

const_iterator QSet::constEnd () const

Same as end(). Provided for consistency with other container classes.

See also constBegin().

bool QSet::contains ( const T & value ) const

Returns true if the set contains item value; otherwise returns false.

See also insert() and remove().

int QSet::count () const

Same as size().

bool QSet::empty () const

This function is provided for STL compatibility. It is equivalent to isEmpty().

const_iterator QSet::end () const

Returns a STL-style iterator pointing to the imaginary item after the last item in the set.

See also begin().

QSet<T> QSet::fromList ( const QList<T> & list )   [static]

Returns a QSet object with the data contained in list. Since QSet doesn't allow duplicates, the resulting QSet might be smaller than the original list was.

Example:

    QStringList list;
    list << "Julia" << "Mike" << "Mike" << "Julia" << "Julia";

    QSet<QString> set = QSet<QString>::fromList(list);
    set.contains("Julia");  // returns true
    set.contains("Mike");   // returns true
    set.size();             // returns 2

See also toList() and QList::toSet().

const_iterator QSet::insert ( const T & value )

Inserts a new item value. If value already exists in the set, nothing happens.

See also operator<<(), remove(), and contains().

QSet<T> & QSet::intersect ( const QSet<T> & other )

Removes any items in this set that don't exist in the other set.

See also operator&=(), unite(), and subtract().

bool QSet::isEmpty () const

Returns true if the set contains no elements; otherwise returns false.

See also size().

bool QSet::remove ( const T & value )

Removes any occurrence of item value from the set. Returns true if an item was actually removed; otherwise returns false.

See also contains() and insert().

void QSet::reserve ( int size )

Ensures that the QSet's internal hash table consists of at least size buckets.

This function is useful for code that needs to build a huge set and wants to avoid repeated reallocation. For example:

    QSet<QString> set;
    set.reserve(20000);
    for (int i = 0; i < 20000; ++i)
        set.insert(values[i]);

Ideally, size should be slightly more than the maximum number of elements expected in the set. size doesn't have to be prime, because QSet will use a prime number internally anyway. If size is an underestimate, the worst that will happen is that the QSet will be a bit slower.

In general, you will rarely ever need to call this function. QSet's internal hash table automatically shrinks or grows to provide good performance without wasting too much memory.

See also squeeze() and capacity().

int QSet::size () const

Returns the number of items in the set.

See also isEmpty() and count().

void QSet::squeeze ()

Reduces the size of the QSet's internal hash table to save memory.

The sole purpose of this function is to provide a means of fine tuning QSet's memory usage. In general, you will rarely ever need to call this function.

See also reserve() and capacity().

QSet<T> & QSet::subtract ( const QSet<T> & other )

Removes all the items in the other set from this set.

See also operator-=(), unite(), and intersect().

QList<T> QSet::toList () const

Returns a QList object with the data contained in this QSet. The order of the elements in the QList is undefined.

Example:

    QSet<QString> set;
    set << "red" << "green" << "blue" << ... << "black";

    QList<QString> list = set.toList();
    qSort(list);

See also fromList(), QList::fromSet(), and qSort().

QSet<T> & QSet::unite ( const QSet<T> & other )

Inserts all the items in the other set into this set.

See also operator|=(), intersect(), and subtract().

QList<T> QSet::values () const

Returns a QList object with the data contained in this QSet. The order of the elements in the QList is undefined.

This is the same as toList().

See also fromList(), QList::fromSet(), and qSort().

bool QSet::operator!= ( const QSet<T> & other ) const

Returns true if other is not equal to this set; otherwise returns false.

Two sets are considered equal if they contain the same elements.

This function requires the value type to implement operator==().

See also operator==().

QSet<T> QSet::operator& ( const QSet<T> & other )

Returns the intersection of this set and other.

See also intersect(), operator&=(), operator|(), and operator-().

QSet<T> & QSet::operator&= ( const QSet<T> & other )

Syntactic sugar for intersect(other).

See also operator&(), operator|=(), and operator-=().

QSet<T> & QSet::operator&= ( const T & value )

This is an overloaded member function, provided for convenience.

Syntactic sugar for intersect(other), with other being a set that only contains value.

QSet<T> QSet::operator+ ( const QSet<T> & other )

Returns the union of this set and other.

See also unite(), operator|=(), operator&(), and operator-().

QSet<T> & QSet::operator+= ( const QSet<T> & other )

Syntactic sugar for unite(other).

See also operator|(), operator&=(), and operator-=().

QSet<T> & QSet::operator+= ( const T & value )

This is an overloaded member function, provided for convenience.

Inserts a new item value and returns a reference to this set. If value already exists in the set, the set is left unchanged.

See also insert().

QSet<T> QSet::operator- ( const QSet<T> & other )

Returns the set difference of this set with other.

See also subtract(), operator-=(), operator|(), and operator&().

QSet<T> & QSet::operator-= ( const QSet<T> & other )

Syntactic sugar for subtract(other).

See also operator-(), operator|=(), and operator&=().

QSet<T> & QSet::operator-= ( const T & value )

This is an overloaded member function, provided for convenience.

Removes any occurrence of item value from the set and returns a reference to this set. If value didn't exist in the set, the set is left unchanged.

See also remove().

QSet<T> & QSet::operator<< ( const T & value )

Inserts a new item value and returns a reference to this set. If value already exists in the set, the set is left unchanged.

See also insert().

QSet<T> & QSet::operator= ( const QSet<T> & other )

Assigns other to this set and returns a reference to this set.

bool QSet::operator== ( const QSet<T> & other ) const

Returns true if other is equal to this set; otherwise returns false.

Two sets are considered equal if they contain the same elements.

This function requires the value type to implement operator==().

See also operator!=().

QSet<T> QSet::operator| ( const QSet<T> & other )

Returns the union of this set and other.

See also unite(), operator|=(), operator&(), and operator-().

QSet<T> & QSet::operator|= ( const QSet<T> & other )

Syntactic sugar for unite(other).

See also operator|(), operator&=(), and operator-=().

QSet<T> & QSet::operator|= ( const T & value )

This is an overloaded member function, provided for convenience.

Inserts a new item value and returns a reference to this set. If value already exists in the set, the set is left unchanged.

See also insert().


Related Non-Members

QDataStream & operator<< ( QDataStream & out, const QSet<T> & set )

This is an overloaded member function, provided for convenience.

Writes the set set to stream out.

This function requires the value type to implement operator<<().

See also Format of the QDataStream operators.

QDataStream & operator>> ( QDataStream & in, QSet<T> & set )

This is an overloaded member function, provided for convenience.

Reads a set from stream in into set.

This function requires the value type to implement operator>>().

See also Format of the QDataStream operators.

Publicité

Best Of

Actualités les plus lues

Semaine
Mois
Année
  1. Les développeurs détestent-ils les antivirus ? Un programmeur manifeste sa haine envers ces solutions de sécurité 23
  2. «Le projet de loi des droits du développeur» : quelles conditions doivent remplir les entreprises pour que le développeur puisse réussir ? 29
  3. Une nouvelle ère d'IHM 3D pour les automobiles, un concept proposé par Digia et implémenté avec Qt 3
  4. PySide devient un add-on Qt et rejoint le Qt Project et le modèle d'open gouvernance 1
  5. Qt Creator 2.5 est sorti en beta, l'EDI supporte maintenant plus de fonctionnalités de C++11 2
  6. Vingt sociétés montrent leurs décodeurs basés sur Qt au IPTV World Forum, en en exploitant diverses facettes (déclaratif, Web, widgets) 0
  7. Thread travailleur avec Qt en utilisant les signaux et les slots, un article de Christophe Dumez traduit par Thibaut Cuvelier 1
  1. « Quelque chose ne va vraiment pas avec les développeurs "modernes" », un développeur à "l'ancienne" critique la multiplication des bibliothèques 94
  2. Apercevoir la troisième dimension ou l'utilisation multithreadée d'OpenGL dans Qt, un article des Qt Quarterly traduit par Guillaume Belz 0
  3. Pourquoi les programmeurs sont-ils moins payés que les gestionnaires de programmes ? Manquent-ils de pouvoir de négociation ? 49
  4. Les développeurs ignorent-ils trop les failles découvertes dans leur code ? Prenez-vous en compte les remarques des autres ? 17
  5. Les développeurs détestent-ils les antivirus ? Un programmeur manifeste sa haine envers ces solutions de sécurité 22
  6. Quelles nouveautés de C++11 Visual C++ doit-il rapidement intégrer ? Donnez-nous votre avis 10
  7. Qt Commercial : Digia organise un webinar gratuit le 27 mars sur la conception d'interfaces utilisateur et d'applications avec le framework 0
Page suivante

Le Qt Labs au hasard

Logo

Améliorer les performances de Qt avec les chaînes de caractères avec SIMD... ou pas

Les Qt Labs sont les laboratoires des développeurs de Qt, où ils peuvent partager des impressions sur le framework, son utilisation, ce que pourrait être son futur. Lire l'article.

Communauté

Ressources

Liens utiles

Contact

  • Vous souhaitez rejoindre la rédaction ou proposer un tutoriel, une traduction, une question... ? Postez dans le forum Contribuez ou contactez-nous par MP ou par email (voir en bas de page).

Qt dans le magazine

Cette page est une traduction d'une page de la documentation de Qt, écrite par Nokia Corporation and/or its subsidiary(-ies). Les éventuels problèmes résultant d'une mauvaise traduction ne sont pas imputables à Nokia. Qt 4.1
Copyright © 2012 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon, vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD.
Vous avez déniché une erreur ? Un bug ? Une redirection cassée ? Ou tout autre problème, quel qu'il soit ? Ou bien vous désirez participer à ce projet de traduction ? N'hésitez pas à nous contacter ou par MP !
 
 
 
 
Partenaires

Hébergement Web