您的位置:首页 > 文旅 > 旅游 > 电影宣传类网页界面设计_在线生成印章_拼多多关键词优化是怎么弄的_营销渠道分为三种模式

电影宣传类网页界面设计_在线生成印章_拼多多关键词优化是怎么弄的_营销渠道分为三种模式

2025/3/22 6:40:43 来源:https://blog.csdn.net/maryhuan/article/details/146394972  浏览:    关键词:电影宣传类网页界面设计_在线生成印章_拼多多关键词优化是怎么弄的_营销渠道分为三种模式
电影宣传类网页界面设计_在线生成印章_拼多多关键词优化是怎么弄的_营销渠道分为三种模式

深入浅出Qt容器类:QList、QMap、QHash等常用容器对比分析


上一篇对比了各个使用场景和特点,为了更好地理解不同容器的性能差异,通过一些常见的操作来比较它们的表现。以下是一些基本操作的时间复杂度:

操作QList<T>QVector<T>QLinkedList<T>QSet<T>QMap<Key, T>QMultiMap<Key, T>QHash<Key, T>QMultiHash<Key, T>QStack<T>QQueue<T>
访问O(1)O(1)O(n)N/AO(log n)O(log n)N/AN/AO(1)O(1)
插入(头部)O(n)O(n)O(1)O(1)O(log n)O(log n)O(1)O(1)O(n)O(n)
插入(尾部)O(1)O(1)O(1)O(1)O(log n)O(log n)O(1)O(1)O(1)O(1)
删除(头部)O(n)O(n)O(1)O(1)O(log n)O(log n)O(1)O(1)O(n)O(n)
删除(尾部)O(1)O(1)O(1)O(1)O(log n)O(log n)O(1)O(1)O(1)O(1)
查找O(n)O(n)O(n)O(1)O(log n)O(log n)O(1)O(1)O(n)O(n)

性能测试案例

下面是一个简单的性能测试示例,展示了不同容器在插入大量元素时的表现。这个测试程序会测量每个容器在插入20000,000个整数和查询所需的时间。

#include <QList>
#include <QVector>
#include <QLinkedList>
#include <QSet>
#include <QMap>
#include <QMultiMap>
#include <QHash>
#include <QMultiHash>
#include <QStack>
#include <QQueue>
#include <QElapsedTimer>
#include <QDebug>template<typename Container>
void testContainerInsertionAndLookup(const QString& containerName, void (*insertFunction)(Container&, int), bool (*lookupFunction)(const Container&, int)) {Container data;QElapsedTimer timer;// 测试插入操作timer.start();for (int i = 0; i < 20000000; ++i) {insertFunction(data, i);}qint64 insertionTime = timer.elapsed();// 测试查找操作timer.restart();lookupFunction(data, 5000000);qint64 lookupTime = timer.elapsed();qDebug() << containerName << "Insert Time:" << insertionTime << "ms."<< "Lookup Time:" << lookupTime << "ms";
}void insertIntoQList(QList<int>& list, int value) {list.append(value);
}bool lookupInQList(const QList<int>& list, int value) {return list.contains(value);
}void insertIntoQVector(QVector<int>& vector, int value) {vector.append(value);
}bool lookupInQVector(const QVector<int>& vector, int value) {return vector.contains(value);
}void insertIntoQLinkedList(QLinkedList<int>& linkedList, int value) {linkedList.append(value);
}bool lookupInQLinkedList(const QLinkedList<int>& linkedList, int value) {return linkedList.contains(value);
}void insertIntoQSet(QSet<int>& set, int value) {set.insert(value);
}bool lookupInQSet(const QSet<int>& set, int value) {return set.contains(value);
}void insertIntoQMap(QMap<int, int>& map, int value) {map[value] = value;
}bool lookupInQMap(const QMap<int, int>& map, int value) {return map.contains(value);
}void insertIntoQMultiMap(QMultiMap<int, int>& multiMap, int value) {multiMap.insert(value, value);
}bool lookupInQMultiMap(const QMultiMap<int, int>& multiMap, int value) {return multiMap.contains(value);
}void insertIntoQHash(QHash<int, int>& hash, int value) {hash[value] = value;
}bool lookupInQHash(const QHash<int, int>& hash, int value) {return hash.contains(value);
}void insertIntoQMultiHash(QMultiHash<int, int>& multiHash, int value) {multiHash.insert(value, value);
}bool lookupInQMultiHash(const QMultiHash<int, int>& multiHash, int value) {return multiHash.contains(value);
}void insertIntoQStack(QStack<int>& stack, int value) {stack.push(value);
}bool lookupInQStack(const QStack<int>& stack, int value) {return stack.contains(value);
}void insertIntoQQueue(QQueue<int>& queue, int value) {queue.enqueue(value);
}bool lookupInQQueue(const QQueue<int>& queue, int value) {return queue.contains(value);
}int main() {testContainerInsertionAndLookup("QList", insertIntoQList, lookupInQList);testContainerInsertionAndLookup("QVector", insertIntoQVector, lookupInQVector);testContainerInsertionAndLookup("QLinkedList", insertIntoQLinkedList, lookupInQLinkedList);testContainerInsertionAndLookup("QSet", insertIntoQSet, lookupInQSet);testContainerInsertionAndLookup("QMap", insertIntoQMap, lookupInQMap);testContainerInsertionAndLookup("QMultiMap", insertIntoQMultiMap, lookupInQMultiMap);testContainerInsertionAndLookup("QHash", insertIntoQHash, lookupInQHash);testContainerInsertionAndLookup("QMultiHash", insertIntoQMultiHash, lookupInQMultiHash);testContainerInsertionAndLookup("QStack", insertIntoQStack, lookupInQStack);testContainerInsertionAndLookup("QQueue", insertIntoQQueue, lookupInQQueue);return 0;
}

测试结果(X86,Qt5.14)

在这里插入图片描述
以上是我的测试结果,仅供参考,若有疑问欢迎在评论区讨论。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com