比较包含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>
答案 0 :(得分:3)
字符串比较可能以麻烦结束:“1.00”!=“1.0”!=“1”!=“0001”
始终使用数字类型来比较数字,并且不必担心任何整体中这样一个微小部分的想象性能问题。
答案 1 :(得分:0)
一次使用只是比较字符串将(可能)比将它们转换为数字并比较数字更快。
如果您需要将结果作为其他步骤的数字,请将它们转换为开头的数字并存储数字。
如果您的错误代码是连续的,那么您通常会将它们放入由[error_code - first_error_code]
索引的向量
但在进行任何优化之前 - 1,测量2,决定你是否关心
答案 2 :(得分:0)
对于您编写的代码,进行两次转换并比较结果将比直接比较字符串慢。
问题是,要进行字符串比较,您必须在最坏的情况下访问每个字符串的每个字符。在!=情况下,您可以在找到差异并退出比较之前访问更少的字符(我假设一个比较例程在失败时提前退出)。在转换和比较的情况下,每次都必须访问两个字符串的所有字符。所以直接比较的情况会更快。
对于地图,您将需要使用QString,因为您将进行一次转换并进行多次比较。这意味着转换的成本将被比较的节省所淹没,最终你将获胜。
答案 3 :(得分:0)
使用QString
个键,地图会在每次插入,删除和查找时执行字符串比较。由于这些比较是重复进行的,因此在将字符串用作映射键之前将字符串转换为整数会更便宜。这样的转换只对每个项目执行一次,也许每次查找一次,查找的键最初也是以QString形式。