2012-06-15 5 views
2

Быстрее сравнить 2 QString s, содержащие числа, или для преобразования этих QString s в числа, а затем сравнить их?QString :: compare() vs преобразование QString в числа, а затем сравнение

так, что быстрее?

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

ИЛИ

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

Причина, почему я спрашиваю, потому что я должен заполнить QMap с кодами ошибок и сообщений об ошибках, соответствующих этим кодам ошибок. Я буду читать сообщение об ошибке/сообщение об ошибке из ini-файла, поэтому мне интересно, лучше ли конвертировать коды ошибок в целые числа и иметь QMap<int,QString> или просто хранить их как QString и иметь QMap<QString,QString>. Какой подход даст мне самый оптимальный код?

Если QMap содержит <error code, error message>

+0

Перед тем, как вы уменьшите запись, отредактируйте свое сообщение, чтобы добавить информацию о том, что вы наблюдали за работой с этими двумя конструктами.Кроме того, когда вы задаетесь вопросом о вещах, обычно рекомендуется искать документацию (для алгоритмической сложности) и связанные файлы заголовков (для подсказок для деталей реализации). – dirkgently

+0

QString str1; QString :: number (str1) неверно. Это функция, которую вы используете для преобразования числа в QString. Чтобы преобразовать QString в число, используйте str1.toInt() или str1.toDouble() и т. Д. – firescreamer

ответ

3

сравнения строк может закончиться неприятностями: «1,00» = «1,0» = «1» = «0001»

Всегда используйте числовые типы для сравнения чисел, и не беспокоиться о себе!!! проблемы производительности такого маленького куска любого целого.

0

За один раз следует использовать только для сравнения строки будет (возможно) будет быстрее, чем преобразование их числа и сравнения чисел.

Если вам нужен результат в качестве номера для других шагов, то преобразуйте их в номера в начале и в хранилище.

Если вы коды ошибок являются смежными, то вы, как правило, но их в вектор индексируется [error_code - first_error_code]

НО, прежде чем делать какие-либо оптимизации - 1, мера 2, решить, если вы заботитесь

0

В случае с код, который вы написали, выполнение двух преобразований и сравнение результатов будет медленнее, чем сравнение строк напрямую.

Дело в том, что для сравнения строк вы должны в худшем случае посещать каждый символ каждой строки. В случае! = Вы можете посетить меньшее количество символов, прежде чем найти diff и выйти из сравнения (я предполагаю, что процедура сравнения, которая выходит на ранней стадии неудачи). В случае преобразования и сравнения вы ДОЛЖНЫ посещать все символы обеих строк каждый раз. Таким образом, случай прямого сравнения будет быстрее.

В случае с картами вы захотите использовать QString, потому что вы сделаете преобразование один раз и сравните много, много раз. Это означает, что стоимость конверсии будет зависеть от экономии от сравнений, и вы выиграете в конце.

0

С помощью клавиш QString карты выполняют сравнения строк при каждой вставке, удалении и поиске. Поскольку эти сравнения выполняются повторно, дешевле преобразовать строку в целое число, прежде чем использовать ее в качестве ключа карты. Такое преобразование затем выполняется только один раз за элемент, и, возможно, один раз для поиска ключ для вашего поиска первоначально также находится в форме QString.

Смежные вопросы