Данные теста CDictionary от Vasiliy Sokolov. Данные теста CHashMap считать недействительными, т.к. при поиске выдает ошибку. Пока не разобрался, почему.
2018.02.22 11:59:01.455 TestHashTable (EURUSD,M5) Время добавления 10000000 элементов = 15.1775 сек, 1.5178 мкс/объект 2018.02.22 11:59:05.112 TestHashTable (EURUSD,M5) Время поиска 10000000 элементов = 3.6547 сек, 0.3655 мкс/объект 2018.02.22 11:59:18.812 TestHashTable (EURUSD,M5) Время удаления 10000000 элементов = 13.6994 сек, 1.3699 мкс/объект
При попытке скомпилировать Cdictionary под МТ4 получаю ошибку компиляции
'union' - declaration without typedictionary2.mqh954
'casting_struct' - declaration without typedictionary2.mqh1114
2 error(s), 0 warning(s)31
Я не понимаю, MQL4 не поддерживает union, что ли??? В MQL5 все компилится без проблем. И что вообще означает дурацкое сообщение "declaration without type"???
--------------
class CDictionary : public CObject
{
private:
int m_array_size;
int m_total;
bool m_free_mode;
bool m_auto_free;
int m_index;
ulong m_hash;
CList *m_array[];
union casting_struct // Вот в этом union возникает ошибка!
{
double d_value;
ulong l_value;
}casting;
При попытке скомпилировать Cdictionary под МТ4 получаю ошибку компиляции
'union' - declaration without typedictionary2.mqh954
'casting_struct' - declaration without typedictionary2.mqh1114
2 error(s), 0 warning(s)31
Я не понимаю, MQL4 не поддерживает union, что ли??? В MQL5 все компилится без проблем. И что вообще означает дурацкое сообщение "declaration without type"???
--------------
Я у себя проверил - компилируется. Ищи где-то ещё ошибочку.
Эта статья описывает удобный класс для хранения информации - ассоциативный массив или словарь. Благодаря этому классу можно получать доступ к информации по ее ключу. Ассоциативный массив напоминает обычный массив, однако вместо индекса он использует некий уникальный ключ, например, перечисление ENUM_TIMEFRAMES или какой-либо текст. Что...
Для чистоты, - нужно экспериментировать на неупорядоченных значениях.
Как минимум, скорость вставок у CHashMap должна упасть.
Можно попробовать, но тогда надо создавать массив случайных чисел и из него копировать, чтобы не тратилось время на генерацию. Или замерить одну генерацию и потом вычесть это время, так красивее будет.
Насчет for можно подробнее? У тебя вижу только CObject GetNextNode(void);
Или сделать просто поиск в массиве?
Да, просто линейный поиск в массиве.
Кстати, в generic реализации нет возможности даже перебрать элементы в CHashMap, так что не понимаю, как ее можно использовать в реальности.
Да, просто линейный поиск в массиве.
Кстати, в generic реализации нет возможности даже перебрать элементы в CHashMap, так что не понимаю, как ее можно использовать в реальности.
Типа foreach? У тебя есть CObject *GetNextNode(void), хотя я использовал только доступ по ключу
Вот первые данные по CHashMap, скоро и остальные сделаю и добавлю поиск
2018.02.21 16:27:12.049 TestHashTable (EURUSD,M5) Время добавления 10000000 элементов = 3.1564 сек, 0.3156 мкс/объект
2018.02.21 16:27:12.588 TestHashTable (EURUSD,M5) Время удаления 10000000 элементов = 0.5387 сек, 0.0539 мкс/объект
Данные теста CDictionary от Vasiliy Sokolov. Данные теста CHashMap считать недействительными, т.к. при поиске выдает ошибку. Пока не разобрался, почему.
2018.02.22 11:59:01.455 TestHashTable (EURUSD,M5) Время добавления 10000000 элементов = 15.1775 сек, 1.5178 мкс/объект
2018.02.22 11:59:05.112 TestHashTable (EURUSD,M5) Время поиска 10000000 элементов = 3.6547 сек, 0.3655 мкс/объект
2018.02.22 11:59:18.812 TestHashTable (EURUSD,M5) Время удаления 10000000 элементов = 13.6994 сек, 1.3699 мкс/объект
------------------------------------------------------
Разобрался с CHashMap из стандартной библиотеки, однако шустрый!
2018.02.22 12:56:51.143 TestHashTable (EURUSD,M5) CheckHashMap()
2018.02.22 12:56:54.466 TestHashTable (EURUSD,M5) Время добавления 10000000 элементов = 3.3208 сек, 0.3321 мкс/объект
2018.02.22 12:56:55.326 TestHashTable (EURUSD,M5) Время поиска 10000000 элементов = 0.8599 сек, 0.0860 мкс/объект
2018.02.22 12:56:55.901 TestHashTable (EURUSD,M5) Время удаления 10000000 элементов = 0.5742 сек, 0.0574 мкс/объект
2018.02.22 12:56:56.026 TestHashTable (EURUSD,M5) CheckDictVS()
2018.02.22 12:57:12.184 TestHashTable (EURUSD,M5) Время добавления 10000000 элементов = 16.1584 сек, 1.6158 мкс/объект
2018.02.22 12:57:16.305 TestHashTable (EURUSD,M5) Время поиска 10000000 элементов = 4.1205 сек, 0.4120 мкс/объект
2018.02.22 12:57:30.063 TestHashTable (EURUSD,M5) Время удаления 10000000 элементов = 13.7580 сек, 1.3758 мкс/объект
При попытке скомпилировать Cdictionary под МТ4 получаю ошибку компиляции
'union' - declaration without type dictionary2.mqh 95 4
'casting_struct' - declaration without type dictionary2.mqh 111 4
2 error(s), 0 warning(s) 3 1
Я не понимаю, MQL4 не поддерживает union, что ли??? В MQL5 все компилится без проблем. И что вообще означает дурацкое сообщение "declaration without type"???
--------------
При попытке скомпилировать Cdictionary под МТ4 получаю ошибку компиляции
'union' - declaration without type dictionary2.mqh 95 4
'casting_struct' - declaration without type dictionary2.mqh 111 4
2 error(s), 0 warning(s) 3 1
Я не понимаю, MQL4 не поддерживает union, что ли??? В MQL5 все компилится без проблем. И что вообще означает дурацкое сообщение "declaration without type"???
--------------
Alexey Volchanskiy:
И что вообще означает дурацкое сообщение "declaration without type"???
--------------
Часто такое выдаёт если ; где-то пропустил, или скобки не парные.
Для чистоты, - нужно экспериментировать на неупорядоченных значениях.
Как минимум, скорость вставок у CHashMap должна упасть.
Часто такое выдаёт если ; где-то пропустил, или скобки не парные.
Артем, так у меня голый файл из статьи https://www.mql5.com/ru/articles/1334#summary не компилируется под МТ4, под МТ5 все ок.
Для чистоты, - нужно экспериментировать на неупорядоченных значениях.
Как минимум, скорость вставок у CHashMap должна упасть.
Можно попробовать, но тогда надо создавать массив случайных чисел и из него копировать, чтобы не тратилось время на генерацию. Или замерить одну генерацию и потом вычесть это время, так красивее будет.