QString :: compare()vs将QString转换为数字然后进行比较

时间:2012-06-15 15:11:00

标签: c++ qt

比较包含2个QString的数字,或将这些QString转换为数字然后比较这些数字会更快吗?

哪个更快?

QString str1,str2;
if(str1.compare(str2)==0)

OR

QString str1,str2;
if(QString::number(str1)==QString::number(str2))

我问的原因是因为我必须填写QMap错误代码和与这些错误代码对应的错误消息。我将从ini文件中读取错误代码/错误消息,所以我想知道是否最好将错误代码转换为整数并使QMap<int,QString>或仅将它们保留为QString s并QMap<QString,QString>。哪种方法会给我最优化的代码?

QMap包含<error code, error message>

的位置

4 个答案:

答案 0 :(得分:3)

字符串比较可能以麻烦结束:“1.00”!=“1.0”!=“1”!=“0001”

始终使用数字类型来比较数字,并且不必担心任何整体中这样一个微小部分的想象性能问题。

答案 1 :(得分:0)

一次使用只是比较字符串将(可能)比将它们转换为数字并比较数字更快。

如果您需要将结果作为其他步骤的数字,请将它们转换为开头的数字并存储数字。

如果您的错误代码是连续的,那么您通常会将它们放入由[error_code - first_error_code]索引的向量

但在进行任何优化之前 - 1,测量2,决定你是否关心

答案 2 :(得分:0)

对于您编写的代码,进行两次转换并比较结果将比直接比较字符串慢。

问题是,要进行字符串比较,您必须在最坏的情况下访问每个字符串的每个字符。在!=情况下,您可以在找到差异并退出比较之前访问更少的字符(我假设一个比较例程在失败时提前退出)。在转换和比较的情况下,每次都必须访问两个字符串的所有字符。所以直接比较的情况会更快。

对于地图,您将需要使用QString,因为您将进行一次转换并进行多次比较。这意味着转换的成本将被比较的节省所淹没,最终你将获胜。

答案 3 :(得分:0)

使用QString个键,地图会在每次插入,删除和查找时执行字符串比较。由于这些比较是重复进行的,因此在将字符串用作映射键之前将字符串转换为整数会更便宜。这样的转换只对每个项目执行一次,也许每次查找一次,查找的键最初也是以QString形式。