Непонятки с CHashMap из стандартной библиотеки

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Alexey Volchanskiy
27262
Alexey Volchanskiy  

Решил протестировать три реализации хеш-таблицы (он же ассоциативный массив). С реализацией из стандартной библиотеки возникли траблы. Мне надо в качестве ключа использовать тип int, в качестве значения указатель на CObject. Читайте комментарии в исходнике ниже. Ясно, что я неправильно работаю с темплейтами, опыта маловато. Как сделать правильно?

#include <Generic\HashMap.mqh>

void OnStart()
{
    CheckHashMap();
}

void CheckHashMap()
{
    CHashMap<int, CObject*> hmap;                   // так компилируется
    CHashMap<int, CObject*> *hmap1 = new CHashMap;  // а так нет, пишет 'CHashMap' - template mismatch  TestHashTable.mq5       22      42
    CHashMap<int, CObject*> *hmap2 = new <int, CObject*>CHashMap; // так тоже нет нет, пишет перед <int, '<' - identifier expected      TestHashTable.mq5       24      42
}
TheXpert
18271
TheXpert  
CHashMap<int, CObject*> *hmap1 = new CHashMap<int, CObject*>;

(c) Ваш Кэп

Vasiliy Sokolov
29802
Vasiliy Sokolov  
CHashMap<int, CObject*> *point = new CHashMap<int, CObject*>();

?

Alexey Volchanskiy
27262
Alexey Volchanskiy  
Vasiliy Sokolov:

?

Тебе и Комбинатору спасибо, я темплейт зачем-то перед CHashMap вставлял )) Кстати, один из вариантов для тестирования твой CDictionary. Могу тут потом результаты выложить.

Vasiliy Sokolov
29802
Vasiliy Sokolov  
Alexey Volchanskiy:

Тебе и Комбинатору спасибо, я темплейт зачем-то перед CHashMap вставлял )) Кстати, один из вариантов для тестирования твой CDictionary.

Все думаю на полноценный шаблон его перевести  вида CDictionary<TKey, TValue>; 

Alexey Volchanskiy:

Могу тут потом результаты выложить.

Интересно, с удовольствием посмотрю.

Alexey Volchanskiy
27262
Alexey Volchanskiy  
Vasiliy Sokolov:

Все думаю на полноценный шаблон его перевести  вида CDictionary<TKey, TValue>; 

Интересно, с удовольствием посмотрю.

Ок, сегодня сделаю. А третий вариант будет этот https://www.mql5.com/ru/code/19314, тут шаблон только для значения, как  я понял.

CDictionary
CDictionary
  • голосов: 20
  • 2017.11.28
  • Enrico Lambino
  • www.mql5.com
Реализация такой структуры данных, как словарь (ассоциативный массив) на MQL5 на основе CArrayObj и CList. Функция хэширования Использование Также в нем могут содержаться указатели на объекты (но не сами объекты или структуры): Устранение противоречий Каждая запись имеет свой собственный хэш. Если две или более записи имеют один и тот же...
Vasiliy Sokolov
29802
Vasiliy Sokolov  
Alexey Volchanskiy:

Ок, сегодня сделаю. А третий вариант будет этот https://www.mql5.com/ru/code/19314, тут шаблон только для значения, как  я понял.

Интересно, посоревнуемся;)

+ Добавь тогда поиск классическим for, для полной картины так сказать.
TheXpert
18271
TheXpert  
Vasiliy Sokolov:
+ Добавь тогда поиск классическим for, для полной картины так сказать.

логичней сравнивать с реализацией мапы на дереве. в дженериках есть CSortedMap на RB деревьях

Vasiliy Sokolov
29802
Vasiliy Sokolov  
Комбинатор:

логичней сравнивать с реализацией мапы на дереве. в дженериках есть CSortedMap на RB деревьях

Да, тоже надо такое добавить. for попросил добавить по той причине, что в MQL очень часто лепят поиск прямым перебором, что как правило не айс.

Alexey Volchanskiy
27262
Alexey Volchanskiy  
Vasiliy Sokolov:

Да, тоже надо такое добавить. for попросил добавить по той причине, что в MQL очень часто лепят поиск прямым перебором, что как правило не айс.

Насчет for можно подробнее? У тебя вижу только CObject GetNextNode(void);

Или сделать просто поиск в массиве?

Alexey Volchanskiy
27262
Alexey Volchanskiy  
Комбинатор:

логичней сравнивать с реализацией мапы на дереве. в дженериках есть CSortedMap на RB деревьях

Не пробовал, посмотрю, что это такое.

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий