Хотите ли Вы идеальный hashfunction (различное значение для каждого объекта, который оценивает для равенства), или просто довольно хороший всегда является компромиссом производительности, обычно требуется время для вычисления хорошего hashfunction и если набор данных является небольшим, Вы лучше из с быстрой функцией. Самой важной (поскольку Ваше второе сообщение указывает) является правильность, и достигнуть этого всего Вам нужно, должен возвратить Длину массива. В зависимости от Вашего набора данных, который мог бы даже быть в порядке. Если это не (скажите, что все Ваши массивы одинаково долги), можно пойти с чем-то дешевым как рассмотрение первого и последнего значения и XORing их значения и затем добавить больше сложности, поскольку Вы считаете целесообразным для своих данных.
А быстрый способ видеть, как Ваш hashfunction работает на Ваших данных, состоит в том, чтобы добавить все данные к хеш-таблице и рассчитать, количество раз Равняется функции, назван, если это слишком часто, у Вас есть больше работы, чтобы сделать на функции. Если Вы делаете это просто имеет в виду, что размер хеш-таблицы должен быть установлен больше, чем Ваш набор данных, когда Вы запускаете, иначе Вы собираетесь перефразировать данные, которые инициируют, повторно вставляет, и больше Равняется оценкам (хотя возможно более реалистичный?)
Для некоторых объектов (не этот) быстрый HashCode может быть сгенерирован ToString ().GetHashCode (), конечно, не оптимальный, но полезный, поскольку люди склонны возвращать что-то близко к идентификационным данным объекта из ToString (), и это точно, что GetHashcode ищет
Мелочи: худшая производительность, которую я когда-либо видел, состояла в том, когда кто-то по ошибке возвратил константу из GetHashCode, легкого определить с отладчиком, хотя, особенно если Вы делаете много поисков в Вашей хеш-таблице
Я не совсем понимаю, что вы имеете в виду под командной строкой vcbuild, но если вы имеете в виду компилятор командной строки Visual C ++, то вы можете добавить определения с помощью add / Dxxxx, например
cl.exe /DSHAREWARE ....
Дополнительный ответ на основе комментарии:
Вы должны иметь возможность установить переменную среды CL с помощью дополнительного определения препроцессора:
SET CL=/DSHAREWARE
devenv ....
Простую информацию можно найти на MSDN
#defines определены в файле проекта Visual Studio (файл .dsp или .vcproj). Это простой текстовый файл. Таким образом, вы можете отредактировать файл проекта из сценария, а затем вызвать devenv.exe.