QSet与QHash插入操作对比:哪种方式性能更优?
QSet插入机制与QHash插入性能对比
QSet的插入逻辑
QSet底层基于QHash实现,插入新元素时不会遍历整个集合做全量比较,具体流程是:
- 先调用元素的
qHash()函数计算哈希值,定位到对应的哈希桶; - 仅与该哈希桶内的现有元素逐一调用
==运算符比较,判断元素是否重复; - 若未检测到重复则完成插入,若已存在重复元素则忽略本次插入。
你的场景下的性能对比
你的元素重载了复杂的==运算符,这意味着QSet插入时一旦出现哈希冲突,就会触发高成本的比较操作。而改用简单ID作为键的QHash方案:
- 哈希计算基于简单ID,计算成本远低于你自定义元素的哈希计算;
- 键的
==比较是简单的ID匹配(如整数、字符串的直接对比),成本远低于你重载的复杂逻辑; - 即使出现哈希冲突,冲突后的比较成本也极低。
因此,在你的场景中,myHash.insert(id, proxy)的插入速度会显著快于mySet.insert(proxy),你的优化思路是完全正确的。
内容的提问来源于stack exchange,提问作者dce_54
相关产品推荐
相关产品推荐

