Анализ операторов C ++ - PullRequest
       4

Анализ операторов C ++

1 голос
/ 27 июля 2010

Я вижу код, в котором в программе создается hash_map:

   // Create a hash_map hm3 with the 
   // allocator of hash_map hm1
   hash_map <MyStr, MyInt>::allocator_type hm1_Alloc;
   hm1_Alloc = hm1.get_allocator( );
   hash_map <MyStr, MyInt, hash_compare <MyStr, less_str > > hm3( hash_compare <MyStr, less_str > (), hm1_Alloc );
   hm3.insert( Int_Pair( "three", 30 ) );

Может кто-нибудь объяснить мне 3-е утверждение, где объявлен hm3.

hash_map <MyStr, MyInt, hash_compare <MyStr, less_str > > hm3( hash_compare <MyStr, less_str > (), hm1_Alloc );

Полная программа может быть найдена здесь

Ответы [ 3 ]

1 голос
/ 27 июля 2010
hash_map <MyStr, MyInt, hash_compare <MyStr, less_str > >

Это тип, представляющий собой хэш-карту, которая отображает MyStr на MyInt, используя пользовательский тип функтора сравнения хешей .Давайте назовем это HashMap.

hash_compare <MyStr, less_str > ()

Синтаксис T() создает временный объект типа T, используя конструктор по умолчанию.Приведенный выше код создает функтор сравнения хешей.Давайте назовем этот объект hashCmp.

hm1_Alloc

Это пользовательский распределитель.

Это объявление затем можно переписать как

typedef hash_compare<MyStr, less_str>     HashCmpT;
typedef hash_map<MyStr, MyInt, HashCmpT>  HashMap;

HashCmpT hashCmp;

HashMap hm3 (hashCmp, hm1_Alloc);
0 голосов
/ 27 июля 2010

Создает объект hash_map с именем hm3. Вот мой взгляд на параметры:

Параметр шаблона 1 (MyStr): ключ для карты

Параметр шаблона 2 (MyInt): значение для ключа

Параметр шаблона 3: функция сравнения для сравнения двух ключей. Для этого вы используете функцию с именем hash_compare (которая снова является шаблоном).

Для используемого вами конструктора (2-й в MSDN) класса hash_map требуется экземпляр функции компаратора и распределителя. Вы создаете неназванный (временный) экземпляр объекта функции hash_compare и передаете распределитель hm1_Alloc в конструктор.

0 голосов
/ 27 июля 2010

Мы создаем объект с именем hm3.Это класс hash_map <MyStr, MyInt, hash_compare <MyStr, less_str > >.Он (класс) является шаблоном класса hash_map, и этот шаблон принимает два параметра - два имени класса.Первый - MyStr.Второй - шаблонная функция hash_compare <MyStr, less_str >.Этот (второй) шаблон принимает также два параметра.Они MyStr класса и что-то называется less_str.

Почему такой шаблон?Полагаю, первым параметром hash является контейнер элемента.Второй - это функция для сравнения таких контейнеров.

Add: И о конструкторе: он принимает результат функции шаблона smt hash_compare <MyStr, less_str > (void) и некоторый объект.

Add2: Может быть показанкак это:

typedef hash_map <MyStr, MyInt, hash_compare <MyStr, less_str > > Someclass;
Someotherclass var = hash_compare <MyStr,    less_str > (); // `var` is what this function returned

Someclass hm3( var, hm1_Alloc );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...