Привет, друзья!
Пытаюсь более углублённо познать cpp но никак не могу разобраться с некоторыми моментами. Попытавшись заглянуть под капот STL просто увидел кучу буковок... В связи с этим прошу вас помочь.
Как я понял, принцип работы map и hash_map примерно одинаковый, только в первом случае идет дополнительная проверка ключей с помощью operator<(), что даёт нам упорядоченность по алфавиту. В hash_map же используется operator==().
Первое, что здесь не понятно - это объявления (переписываю из книжки Страуструпа)
C++ (Qt)
template<class Key, class T, class Cmp=less<Key>, class A=allocator<pair<const Key,T> > >
class std::map
{
// ...
};
template<class Key, class T, class H = Hash<Key>, class EQ = equal_to<Key>, class A = allocator<pair<const Key, T> > >
class hash_map
{
// ...
};
кто такие less, Hash и equal_to? Я это расценил как имена неких функций, объявление которых я не нашёл.
Также мне никак не разобраться в принципе хранения. Для hash_map написано следующее:
C++ (Qt)
class hash_map
{
// ...
vector<Entry> v; // истинные входы
vector<Entry*>b; // хэш-таблица: указатели внутрь v
// ...
};
И приведён рисунок
Мне не совсем понятно назначение b. Почему бы просто не иметь массив структур Entry?