StupidBeauty
Read times:2192Posted at:Fri Dec 10 13:12:23 2010 - no title specified

Qt4.7.0文档翻译:QSet类参考,QSet Class Reference

QSet类是一个模板类,它提供一个基于散列表的集合

QSet<T>是Qt 的通用 容器类 之一 。它以一个不确定的顺序来储存 值,并且为 值提供非常快的查找功能。 在内部,QSet<T>是以一个 QHash 的形式实现的。

这是一个以 QString 作为 值的QSet 的示例:

QSet<QString> set;

要将一个 值插入到集合中,就使用 insert ():

set.insert("one");

set.insert("three");

set.insert("seven");

另外一个将条目插入到集合中的方法是使用operator<<()

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

要测试一个条目是否属于一个集合 ,就使用 contains ():

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

...

如果你想遍历一个QSet 里面所有的 值,你可以使用一个迭代器 QSet同时支持 Java风格的迭代器 ( QSetIterator QMutableSetIterator )和 STL风格的迭代器 ( QSet::iterator QSet::const_iterator ) 。像这样使用Java 风格的迭代器来遍历一个QSet< QWidget  *>

QSetIterator<QWidget *> i(set);

while (i.hasNext())

qDebug() << i.next();

这里是相同的代码,不过使用的是一个STL 风格的迭代器

QSet<QWidget *>::const_iterator i = set.constBegin();

while (i != set.constEnd()) {

qDebug() << *i;

++i;

}

QSet是不排序的 ,所以不能假设一个迭代器的序列是可预测的 。如果需要按照 键值来排序,那就使用一个 QMap

你也可以使用 foreach 来遍历一个QSet

QSet<QString> set;

...

foreach (QString value, set)

qDebug() << value;

可以使用 remove ()来将条目从集合中删除 。还有一个 clear ()函数 ,可以删除全部条目

QSet的 值的数据类型必须是一个 可赋 值的数据类型 。例如 ,你不能将一个 QWidget 作为 值来储存 ;你应当储存一个 QWidget  * 。另外 ,那个数据类型必须提供 operator==() ,而且必须存在一个全局的 qHash ()函数 ,它为 键值的数据类型的一个参数返回一个散列值。查看 QHash 文档中的 qHash ()支持的数据类型的列表。

在内部 QSet使用一个散列表来进行查找 。这个散列表自动地增长或缩小 ,以提供快速的查找,同时不浪费内存。如果你已经知道这个QSet 中大概会包含多少个元素了 ,那么你仍然可以通过调用 reserve ()来控制散列表的大小 ,但是这对于取得良好的性能并不是必要的 。你可以调用 capacity ()来查询散列表的大小

参见 QSetIterator QMutableSetIterator QHash QMap

Your opinions
Your name:Email:Website url:Opinion content:
- no title specified

HxLauncher: Launch Android applications by voice commands