Собственно задача понятна — получить класс который ведет себя "как basic_string"(при этом полный функционал вовсе не обязательно, отсюда отсутствие многого из интерфейса basic_string ), и в то же время сравнение объекто этого класса происходит через хэш). Смысла пинать функцию makeHash() особого нет( Её код тиснут из STL порта).
Основной критерйи по сути — возможность хранить в контейнерах STL.
Так как нет гарантии, что две разные строки всегда будут иметь разное значение хэша, то все-равно надо при равенстве хэшей двух строк проверять обычным способом — через strcmp или что-то подобное. Ну и я бы еще сделал вычисление хэша отложенным, при первом сравнении. А так получается, что на любой чих мы вычисляем хэш, даже если он нам потом и не понадобится. Вообще же, за исключением уж совсем клинических случаев, можно было бы хэш не хранить и сравнивать длину и первый/последний символ, например, чтобы быстро отсечь неравевенство.
Здравствуйте, dip_2000, Вы писали:
_>Собственно задача понятна — получить класс который ведет себя "как basic_string"(при этом полный функционал вовсе не обязательно, отсюда отсутствие многого из интерфейса basic_string ), и в то же время сравнение объекто этого класса происходит через хэш). Смысла пинать функцию makeHash() особого нет( Её код тиснут из STL порта).
Я сначало подумал про HashTable со стрингом, тогда уж hashed_string, что бы не было путаницы.
Потом, ты можешь увеличить уникальность хеша, учитывая, что он будет сравниваться после сравнения длин строк.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
COF>Так как нет гарантии, что две разные строки всегда будут иметь разное значение хэша, то все-равно надо при равенстве хэшей двух строк проверять обычным способом — через strcmp или что-то подобное. Ну и я бы еще сделал вычисление хэша отложенным, при первом сравнении. А так получается, что на любой чих мы вычисляем хэш, даже если он нам потом и не понадобится. Вообще же, за исключением уж совсем клинических случаев, можно было бы хэш не хранить и сравнивать длину и первый/последний символ, например, чтобы быстро отсечь неравевенство.
Спасибо за ответ, учту.
Здравствуйте, Vain, Вы писали:
V>Здравствуйте, dip_2000, Вы писали:
_>>Собственно задача понятна — получить класс который ведет себя "как basic_string"(при этом полный функционал вовсе не обязательно, отсюда отсутствие многого из интерфейса basic_string ), и в то же время сравнение объекто этого класса происходит через хэш). Смысла пинать функцию makeHash() особого нет( Её код тиснут из STL порта). V>Я сначало подумал про HashTable со стрингом,
угу, только не стандартен он по этому этот код и пишется...
> тогда уж hashed_string, что бы не было путаницы. V>Потом, ты можешь увеличить уникальность хеша, учитывая, что он будет сравниваться после сравнения длин строк.
Спасибо, учту.