Здравствуйте Все!
Помогите начинающему программеру перелезть с перловки на си.
Есть вот в Perl замечательная штука "хеш". И избавляет она от многих гемороев в процессе написания программ потому что есть в ней пара "ключ" — "значение". И поиск по ней вести легко и удобно. И про поиск нужного значения в массиве можно забыть.
И думаю я как бы эту модную штуку использовать на си. Ведь такая задача встречается постоянно. А определять струкртуру типа ключ значение. Потом создавать массив из этих структур. А потом для поиска нужного значения делать цикл по всему массиву и искать это значение блин
Знаю что это не очень сложно, но так как отличаюсь поразительной ленью, очень хочится услышать про универсальный способ создания и поиска в хешах.
Здравствуйте ursaloff, Вы писали:
U>Знаю что это не очень сложно, но так как отличаюсь поразительной ленью, очень хочится услышать про универсальный способ создания и поиска в хешах.
Здравствуйте Esef, Вы писали:
E>Есть такая штука и в си. Называется MAP;
E>объявляешь что-то вроде
E>typedef map<ТипКлюча, ТипЗначения*> MYMAP E>и дальше E>MYMAP myMap;
а как тогда забивать и вытаскивать значения по ключу?
к примеру:
U>>просто, честно давно не брал в руки книг по С :-\
E>Поищи в MSDN по map. Там готовый пример есть.
Вообще-то std::map — это не совсем хэш :) Операции поиска другую сложность имеют (O(log(N)) для map вместо константного для хэша), на множестве ключей для map должна быть определена упорядочивания. Хотя не знаю, может в перле хэш тоже не настоящий :) В принципе, для C++ реализации хэша вроде есть в SGI STL и, видимо, в STLPort.
Здравствуйте Аноним, Вы писали:
А>Вообще-то std::map — это не совсем хэш Операции поиска другую сложность имеют (O(log(N)) для map вместо константного для хэша), на множестве ключей для map должна быть определена упорядочивания. Хотя не знаю, может в перле хэш тоже не настоящий В принципе, для C++ реализации хэша вроде есть в SGI STL и, видимо, в STLPort.
Если я не ошибаюсь, в стандартном C++ есть и настоящий хэш. Вот только не помню как он называется. В Страуструпе написанно, надо посмотреть
Здравствуйте Esef,
E>Если я не ошибаюсь, в стандартном C++ есть и настоящий хэш. Вот только не помню как он называется. В Страуструпе написанно, надо посмотреть
Здравствуйте Esef, Вы писали:
E>Здравствуйте Аноним, Вы писали:
А>>Вообще-то std::map — это не совсем хэш Операции поиска другую сложность имеют (O(log(N)) для map вместо константного для хэша), на множестве ключей для map должна быть определена упорядочивания. Хотя не знаю, может в перле хэш тоже не настоящий В принципе, для C++ реализации хэша вроде есть в SGI STL и, видимо, в STLPort.
E>Если я не ошибаюсь, в стандартном C++ есть и настоящий хэш. Вот только не помню как он называется. В Страуструпе написанно, надо посмотреть
Ошибаешься — hash_map нестандартный Да и у Страуструпа об этом вроде как открытым текстом говорится.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Здравствуйте Mishka<T>, Вы писали:
MT>Здравствуйте Esef,
E>>Если я не ошибаюсь, в стандартном C++ есть и настоящий хэш. Вот только не помню как он называется. В Страуструпе написанно, надо посмотреть
MT>См. hash_map. У Страуструпа п. 17.6.1
никак не могу найти в электронном варианте. Везде там вроди бы до 13 главы только.
Где взять полный архив и желательно в ХТМЛ?
Спасибо
Rest Begards,
UrsaloFF
Re[3]: Хеши в C++
От:
Аноним
Дата:
24.05.02 09:34
Оценка:
Здравствуйте ursaloff, Вы писали:
U>Здравствуйте Esef, Вы писали:
E>>Есть такая штука и в си. Называется MAP;
E>>объявляешь что-то вроде
E>>typedef map<ТипКлюча, ТипЗначения*> MYMAP E>>и дальше E>>MYMAP myMap; U>а как тогда забивать и вытаскивать значения по ключу? U>к примеру: U>
U>просто, честно давно не брал в руки книг по С :-\
std::map — это не совсем хэш. Это BTree.
Позволяет он применно тоже, что и хэш но:
std::map отсортированы.
BTree имеет логарифмический перфоманс, а хэш — почти константный
Есть еще нестандартный контейнер std::hash_map
Его нет в действующем стандарте C++, но есть в draft-версии следующего.
hash_map входит в SGI STL (им пользуется, напр. gcc, может быть borland и некоторые др. компайлеры) и в STLPort
U>>>просто, честно давно не брал в руки книг по С
E>>Поищи в MSDN по map. Там готовый пример есть.
А>Вообще-то std::map — это не совсем хэш Операции поиска другую сложность имеют (O(log(N)) для map вместо константного для хэша), на множестве ключей для map должна быть определена упорядочивания. Хотя не знаю, может в перле хэш тоже не настоящий В принципе, для C++ реализации хэша вроде есть в SGI STL и, видимо, в STLPort.
Ну если используется CString то можно и CMap (смотри в MSDN) , он как раз на хеше реализован.