Библиотека Generic классов - ошибки, описание, вопросы, особенности использования и предложения - страница 23
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Функция объявлена на глобальном уровне. По этой причине идет конфликт со своими Compare у пользователей.
Чтобы уменьшить количество конфликтов с именами, мог бы Автор все глобальные вспомогательные Generic-функции сделать public-static-методами?
fxsaber:
Чтобы уменьшить количество конфликтов с именами, мог бы Автор все глобальные вспомогательные Generic-функции сделать public-static-методами?
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Баг компилятора: 'operator=' - structure have objects and cannot be copied
Это до поры до времени. Когда всё свалено в одну кучу, то крах неизбежен ) Захотите подключить чью-то библиотеку, а тут окажется что автор пишет так же "примитивно" как и вы, используя такие же имена классов и функций.
Макросами прибью.Макросами прибью.
Вел речь не о себе.
Прочитал все страницы дискуссии но так и не понял как использовать ?
Может кто нибудь привести примеры ?
Прочитал все страницы дискуссии но так и не понял как использовать ?
Может кто нибудь привести примеры ?
Забейте. В том виде в котором сейчас это есть использовать нельзя. Вместо этого пользуйтесь стандартным CObject + CDictionary. Для большинства задач этого хватает.
Вопрос о получении значения по ключу. В коде библиотеки этот метод выглядит так
Средства навигации ME (ALT+G и CTRL+-) по исходнику отказываются работать в этой библиотеке. Поэтому очень сложно проследить логику. В частности, пока не выяснил начальное значение в выделенном цикле. Но есть понимание, что если имеется скорость, то это значение должно быть много меньше количества ключей.
Просьба пояснить идею, за счет чего достигается скорость в этой функции? Перебор явно присутствует. Но, видимо, он по какой-то причине короткий.
ЗЫ Прошелся пошагово дебагером. Все стало понятно на примере TKey = int: m_bucket[Array[i]] = i. Не разобрался только с коллизиями, когда Array[i] == Array[j] (i != j).
Вопрос о получении значения по ключу. В коде библиотеки этот метод выглядит так
Просьба пояснить идею, за счет чего достигается скорость в этой функции? Перебор явно присутствует. Но, видимо, он по какой-то причине короткий.
В свое время разбирал и описывал принцип работы CHashMap
Нужно поискать записи, скорее всего в этой ветке.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Библиотека Generic классов - ошибки, описание, вопросы, особенности использования и предложения
Sergey Dzyublik, 2017.12.11 13:41
Кратко о текущей реализации CHashMap:
Сперва нужно разобраться что такое Entry<TKey,TValue>
По сути это Node как в CLinkedList, который содержит:
m_entries[] - массив "ячеек", куда помещаются добавленные key и value, hash_code, next. Размер массива соответствует Capacity.
m_count - указывает индекс первой не использованной ячейки в m_entries. Начальное значение 0, растет до Capacity, дальше идет перестройка всех массивов с увеличением Capacity и размера всех массивов.
m_buckets[] - массив индексов на m_entries[]. Значение по умолчанию -1. Размер массива соответствует Capacity.
Без коллизий, добавление уникального значения в контейнер CHashMap:
Без коллизий, получение значения по ключу в контейнере CHashMap:
Разрешение коллизий:
Коллизия, получение значения по ключу в контейнере CHashMap:
Удаление значения из контейнера CHashMap:
Перестройка хеш-таблицы (процесс увеличения Capacity) :
Описанное поведение от 2017.12.11
На текущий момент, могли добавить/изменить некоторые детали/коэффициенты.
В свое время я разбирал и описывал принцип работы CHashMap
Нужно поискать записи, скорее всего в этой ветке.
Нашел
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Библиотека Generic классов - ошибки, описание, вопросы, особенности использования и предложения
Sergey Dzyublik, 2017.12.07 14:21
В данном примере хеш - это день рождения ученика.
У нас есть шкаф с 365 полочками в которых лежат дневники учеников.
Мы положили каждый дневник на полочку отвечающую дню рождения ученика.
Нам нужен дневник ученика Петрова и мы знаем когда он народился.
Теперь по дню рождения за O(1) мы легко можем найти дневник Петрова, как и дневник любого другого ученика.
Исключением являются случаи когда два ученика имеют один и тот же день рождения - это называется коллизия.
Розруливание коллизии - это использование дополнительной информации для определения какой именно из двух или более дневников нам нужен.
Разруливание через список - это простой последовательный перебор всех элементов участвующих в колизии на соответствие искомому. Отрывать каждый дневник и смотреть чей он.
Разруливание через подхеш - это организация хеш таблицы из элементов участвующих в колизии но уже по другому критерию. Например, по часу когда родился ученик.
Если интересует тема - советую курс от MailRu на youtube об алгоритмах и структурах данных.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Библиотека Generic классов - ошибки, описание, вопросы, особенности использования и предложения
Sergey Dzyublik, 2017.12.08 14:40
Основы по теме для ленивых:
https://www.slideshare.net/mkurnosov/6-32402313
В реальности все намного сложнее и обсуждается в соответсвующей литературе или на хороших курсах "алгоритмы и структуры данных".
Спасибо, дебаг помог. Там мелкие списки для коллизий. Пробежался по ветке и ужаснулся. Оказывается, был в теме...
На текущий момент, могли добавить/изменить некоторые детали/коэффициенты.
Спасибо огромное! Сильно помогли доразобраться своим описанием.