2

数値を含む2を比較する方が速いですQStringか、それともそれらを数値に変換してから数値を比較する方が速いQStringですか?

どちらが速いですか?

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

また

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

私が尋ねている理由はQMap、エラーコードとそれらのエラーコードに対応するエラーメッセージを入力する必要があるためです。私はiniファイルからエラーコード/エラーメッセージを読んでいるので、エラーコードを整数に変換して持っている方が良いのか、それともQMap<int,QString>単にQStringsと持っているだけにしておくのが良いのか疑問に思ってい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

一度だけ使用すると、文字列を数値に変換して数値を比較するよりも、文字列を比較する方が(おそらく)高速になります。

他のステップの数値として結果が必要な場合は、それらを開始時に数値に変換し、数値を格納します。

エラーコードが連続している場合は、通常、次のようにインデックス付けされたベクトルになります。[error_code - first_error_code]

しかし、最適化を行う前に-1、測定2、気にするかどうかを決定します

于 2012-06-15T15:19:38.023 に答える
0

作成したコードの場合、2つの変換を実行して結果を比較すると、文字列を直接比較するよりも遅くなります。

文字列の比較を行うには、最悪の場合、各文字列の各文字にアクセスする必要があります。!=の場合、差分を見つけて比較を終了する前に、訪問する文字が少なくなる可能性があります(失敗すると早期に終了する比較ルーチンを想定しています)。変換と比較の場合、毎回、両方の文字列のすべての文字にアクセスする必要があります。したがって、直接比較の場合はより高速になります。

マップの場合、変換を1回実行し、比較を何度も実行するため、QStringを使用することをお勧めします。つまり、変換のコストは比較による節約に圧倒され、最終的には勝ちます。

于 2012-06-15T15:21:35.917 に答える
0

キーを使用QStringすると、マップはすべての挿入、削除、およびルックアップで文字列比較を実行します。これらの比較は繰り返し行われるため、マップキーとして使用する前に、文字列を整数に変換する方が安価です。このような変換は、アイテムごとに1回だけ実行され、ルックアップごとに1回だけ実行されます。ルックアップのキーは、元々QString形式でもあります。

于 2012-06-15T19:35:22.660 に答える