Ваше каноническое решение. Я не уверен, как вы могли бы сделать это так, чтобы было лучше.
Более подробно, если в вашем классе есть n
членов, вы обнаружите, что вам нужно сравнить некоторое количество этих полей, чтобы установить строгий порядок. Реального пути к этому нет, хотя вы можете обнаружить, что можно сделать функцию сравнения более эффективной (с точки зрения средней сложности), если вы упорядочите сравнения так, чтобы те, которые с большей вероятностью способствовали успеху сравнение будет первым. Это помогает быстрее выпасть из сравнения.
Возможность, которая может помочь в некоторых обстоятельствах (если вы обнаружите, что в производительности преобладают сравнения), заключается в создании «ключа сортировки» - сравнение строк может быть дорогостоящим. Ключ сортировки - это целое число, которое можно использовать для быстрого сравнения объектов. Если ключ сортировки сравнивается меньше чем, то строка тоже подойдет.
В вашем случае упрощенный ключ сортировки может включать обработку двоичного представления строк в виде целых чисел - кстати, в этом есть много ошибок - и затем сравнение целых чисел вместо строк.
В Windows функция LCMapString может использоваться для создания ключа сортировки строк таким образом. Я думаю, что тогда вы можете использовать быструю функцию, такую как memcmp
, для сравнения строк вместо более медленного сравнения строк. Это более полезно, если вы будете выполнять сравнение без учета регистра или использовать полный диапазон символов Юникода и хотите получить правильные сравнения в соответствии с их правилами.