2

QString比较包含数字的 2 s,还是将这些QStrings 转换为数字然后比较数字会更快吗?

那么哪个更快?

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

或者

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

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

QMap包含在哪里<error code, error message>

4

4 回答 4

3

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

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

于 2012-06-15T19:42:56.963 回答
0

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

于 2012-06-15T19:35:22.660 回答
0

有一次,只比较字符串(可能)比将它们转换为数字并比较数字要快。

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

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

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

于 2012-06-15T15:19:38.023 回答
0

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

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

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

于 2012-06-15T15:21:35.917 回答