IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

QSet Class

L'auteur

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

QSet Class

Detailed Description

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:

 
Sélectionnez
QSet&lt;QString&gt; set;

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

 
Sélectionnez
set.insert("one");
set.insert("three");
set.insert("seven");

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

 
Sélectionnez
set &lt;&lt; "twelve" &lt;&lt; "fifteen" &lt;&lt; "nineteen";

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

 
Sélectionnez
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 QMutableSetIterator) and STL-style iterators (QSet::iterator and QSet::const_iterator). Here's how to iterate over a QSet<QWidget *> using a Java-style iterator:

 
Sélectionnez
QSetIterator&lt;QWidget *&gt; i(set);
while (i.hasNext())
    qDebug() &lt;&lt; i.next();

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

 
Sélectionnez
QSet&lt;QWidget *&gt;::const_iterator i = set.constBegin();
while (i != set.constEnd()) {
    qDebug() &lt;&lt; *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:

 
Sélectionnez
QSet&lt;QString&gt; set;
...
foreach (const QString &amp;value, set)
    qDebug() &lt;&lt; value;

Items can be removed from the set using remove(). There is 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 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

Member Type Documentation

 

QSet::ConstIterator

Qt-style synonym for QSet::const_iterator.

[since 4.2] QSet::Iterator

Qt-style synonym for QSet::iterator.

This typedef was introduced in Qt 4.2.

QSet::const_pointer

Typedef for const T *. Provided for STL compatibility.

QSet::const_reference

Typedef for const T &. Provided for STL compatibility.

[since 5.6] QSet::const_reverse_iterator

The QSet::const_reverse_iterator typedef provides an STL-style const reverse iterator for QSet.

It is simply a typedef for std::reverse_iterator<QSet::const_iterator>.

Iterators on implicitly shared containers do not work exactly like STL-iterators. You should avoid copying a container while iterators are active on that container. For more information, read Implicit sharing iterator problem.

This typedef was introduced in Qt 5.6.

See Also

QSet::difference_type

Typedef for const ptrdiff_t. Provided for STL compatibility.

QSet::key_type

Typedef for T. Provided for STL compatibility.

QSet::pointer

Typedef for T *. Provided for STL compatibility.

QSet::reference

Typedef for T &. Provided for STL compatibility.

[since 5.6] QSet::reverse_iterator

The QSet::reverse_iterator typedef provides an STL-style non-const reverse iterator for QSet.

It is simply a typedef for std::reverse_iterator<QSet::iterator>.

Iterators on implicitly shared containers do not work exactly like STL-iterators. You should avoid copying a container while iterators are active on that container. For more information, read Implicit sharing iterator problem.

This typedef was introduced in Qt 5.6.

See Also

QSet::size_type

Typedef for int. Provided for STL compatibility.

QSet::value_type

Typedef for T. Provided for STL compatibility.

Member Function Documentation

 

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

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

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

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

See Also

See also insert()

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

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

Same as unite(other).

See Also

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

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

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

Returns a new QSet that is the union of this set and the other set.

See Also

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

QSet::QSet()

Constructs an empty set.

See Also

See also clear()

[since 5.1] QSet::QSet(std::initializer_list<T> list)

Constructs a set with a copy of each of the elements in the initializer list list.

This function is only available if the program is being compiled in C++11 mode.

This function was introduced in Qt 5.1.

QSet::const_iterator QSet::begin() const

Returns a const STL-style iterator positioned at the first item in the set.

See Also

See also constBegin(), end()

[since 4.2] QSet::iterator QSet::begin()

This is an overloaded function.

Returns a non-const STL-style iterator positioned at the first item in the set.

This function was introduced in Qt 4.2.

int QSet::capacity() const

Returns the number of buckets in the set'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

See also reserve(), squeeze()

[since 5.0] QSet::const_iterator QSet::cbegin() const

Returns a const STL-style iterator positioned at the first item in the set.

This function was introduced in Qt 5.0.

See Also

See also begin(), cend()

[since 5.0] QSet::const_iterator QSet::cend() const

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

This function was introduced in Qt 5.0.

See Also

See also cbegin(), end()

void QSet::clear()

Removes all elements from the set.

See Also

See also remove()

QSet::const_iterator QSet::constBegin() const

Returns a const STL-style iterator positioned at the first item in the set.

See Also

See also begin(), constEnd()

QSet::const_iterator QSet::constEnd() const

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

See Also

See also constBegin(), end()

[since 4.2] QSet::const_iterator QSet::constFind(const T &value) const

Returns a const iterator positioned at the item value in the set. If the set contains no item value, the function returns constEnd().

This function was introduced in Qt 4.2.

See Also

See also find(), contains()

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

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

See Also

See also insert(), remove(), find()

[since 4.6] bool QSet::contains(const QSet<T> &other) const

Returns true if the set contains all items from the other set; otherwise returns false.

This function was introduced in Qt 4.6.

See Also

See also insert(), remove(), find()

int QSet::count() const

Same as size().

[since 5.6] QSet::const_reverse_iterator QSet::crbegin() const

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

This function was introduced in Qt 5.6.

See Also

See also begin(), rbegin(), rend()

[since 5.6] QSet::const_reverse_iterator QSet::crend() const

Returns a const STL-style reverse iterator pointing to one past the last item in the set, in reverse order.

This function was introduced in Qt 5.6.

See Also

See also end(), rend(), rbegin()

bool QSet::empty() const

Returns true if the set is empty. This function is provided for STL compatibility. It is equivalent to isEmpty().

QSet::const_iterator QSet::end() const

Returns a const STL-style iterator positioned at the imaginary item after the last item in the set.

See Also

See also constEnd(), begin()

[since 4.2] QSet::iterator QSet::end()

This is an overloaded function.

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

This function was introduced in Qt 4.2.

[since 5.7] QSet::iterator QSet::erase(QSet::const_iterator pos)

Removes the item at the iterator position pos from the set, and returns an iterator positioned at the next item in the set.

Unlike remove(), this function never causes QSet to rehash its internal data structure. This means that it can safely be called while iterating, and won't affect the order of items in the set.

This function was introduced in Qt 5.7.

See Also

See also remove(), find()

[since 4.2] QSet::iterator QSet::erase(QSet::iterator pos)

This is an overloaded function.

This function was introduced in Qt 4.2.

[since 4.2] QSet::const_iterator QSet::find(const T &value) const

Returns a const iterator positioned at the item value in the set. If the set contains no item value, the function returns constEnd().

This function was introduced in Qt 4.2.

See Also

See also constFind(), contains()

[since 4.2] QSet::iterator QSet::find(const T &value)

This is an overloaded function.

Returns a non-const iterator positioned at the item value in the set. If the set contains no item value, the function returns end().

This function was introduced in Qt 4.2.

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

Returns a new QSet object containing the data contained in list. Since QSet doesn't allow duplicates, the resulting QSet might be smaller than the list, because QList can contain duplicates.

Example:

 
Sélectionnez
QStringList list;
list &lt;&lt; "Julia" &lt;&lt; "Mike" &lt;&lt; "Mike" &lt;&lt; "Julia" &lt;&lt; "Julia";

QSet&lt;QString&gt; set = QSet&lt;QString&gt;::fromList(list);
set.contains("Julia");  // returns true
set.contains("Mike");   // returns true
set.size();             // returns 2
See Also

See also toList(), QList::toSet()

QSet::iterator QSet::insert(const T &value)

Inserts item value into the set, if value isn't already in the set, and returns an iterator pointing at the inserted item.

See Also

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

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

Removes all items from this set that are not contained in the other set. A reference to this set is returned.

See Also

See also intersects(), operator&=(), unite(), subtract()

[since 5.6] bool QSet::intersects(const QSet<T> &other) const

Returns true if this set has at least one item in common with other.

This function was introduced in Qt 5.6.

See Also

See also contains(), intersect()

bool QSet::isEmpty() const

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

See Also

See also size()

[since 5.6] QSet::reverse_iterator QSet::rbegin()

Returns a STL-style reverse iterator pointing to the first item in the set, in reverse order.

This function was introduced in Qt 5.6.

See Also

See also begin(), crbegin(), rend()

[since 5.6] QSet::const_reverse_iterator QSet::rbegin() const

This is an overloaded function.

This function was introduced in Qt 5.6.

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

See also contains(), insert()

[since 5.6] QSet::reverse_iterator QSet::rend()

Returns a STL-style reverse iterator pointing to one past the last item in the set, in reverse order.

This function was introduced in Qt 5.6.

See Also

See also end(), crend(), rbegin()

[since 5.6] QSet::const_reverse_iterator QSet::rend() const

This is an overloaded function.

This function was introduced in Qt 5.6.

void QSet::reserve(int size)

Ensures that the set'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:

 
Sélectionnez
QSet&lt;QString&gt; set;
set.reserve(20000);
for (int i = 0; i &lt; 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

See also squeeze(), capacity()

int QSet::size() const

Returns the number of items in the set.

See Also

See also isEmpty(), count()

void QSet::squeeze()

Reduces the size of the set'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

See also reserve(), capacity()

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

Removes all items from this set that are contained in the other set. Returns a reference to this set.

See Also

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

void QSet::swap(QSet<T> &other)

Swaps set other with this set. This operation is very fast and never fails.

QList<T> QSet::toList() const

Returns a new QList containing the elements in the set. The order of the elements in the QList is undefined.

Example:

 
Sélectionnez
QSet&lt;QString&gt; set;
set &lt;&lt; "red" &lt;&lt; "green" &lt;&lt; "blue" &lt;&lt; ... &lt;&lt; "black";

QList&lt;QString&gt; list = set.toList();
qSort(list);
See Also

See also fromList(), QList::fromSet()

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

Each item in the other set that isn't already in this set is inserted into this set. A reference to this set is returned.

See Also

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

QList<T> QSet::values() const

Returns a new QList containing the elements in the set. The order of the elements in the QList is undefined.

This is the same as toList().

See Also

See also fromList(), QList::fromSet()

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

Returns true if the other set 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

See also operator==()

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

Returns a new QSet that is the intersection of this set and the other set.

See Also

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

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

Same as intersect(other).

See Also

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

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

This is an overloaded function.

Same as intersect(other), if we consider other to be a set that contains the singleton value.

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

Returns a new QSet that is the set difference of this set and the other set, i.e., this set - other set.

See Also

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

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

Same as subtract(other).

See Also

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

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

Removes the occurrence of item value from the set, if it is found, and returns a reference to the set. If the value is not contained the set, nothing is removed.

See Also

See also remove()

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

Returns true if the other set 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

See also operator!=()

Related Non-Members

 

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

Writes the set to stream out.

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

See Also

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

Reads a set from stream in into set.

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

See Also

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+