template<typename TKey,typename TValue>
class CHashMap: public IMap<TKey,TValue>
{
protected:
int m_buckets[];
Entry<TKey,TValue>m_entries[];
int m_count;
int m_free_list;
int m_free_count;
IEqualityComparer<TKey>*m_comparer;
bool m_delete_comparer;
.................................
//+------------------------------------------------------------------+//| Gets the element at the specified index. |//+------------------------------------------------------------------+template<typename T>
bool CArrayList::TryGetValue(constint index,T &value) const
一个很好的理论例子!在实践中,有没有人操作过成千上万的交易?
p.s. 我不是要证明它是垃圾,没有人需要它。我正在努力理解对真实交易的价值。我不是一个一般的理论家,而是一个纯粹的实践者。
简要介绍一下目前CHashMap 的实现。
首先,我们来看看什么是Entry<TKey,TValue>。
从本质上讲,它是CLinkedList中的一个Node,它包含。
m_entries[] - "单元格 "数组,用于放置添加的键和值、哈希代码、下一步。阵列的大小与容量相对应。
m_count - 指定m_entries中第一个未使用的单元格的索引。初始值为0,增长到容量,接下来是重建所有阵列,增加容量和所有阵列的大小。
m_buckets[] - m_entries[]的索引阵列。默认值为-1。阵列大小与容量相对应。
没有碰撞,为CHashMap 容器添加唯一值。
在没有碰撞的情况下,通过CHashMap 容器中的键获取值。
碰撞解决。
碰撞,在CHashMap 容器中通过键获取值。
从CHashMap 容器中删除一个值。
重建哈希表(增加容量的过程) :
关于交易、自动交易系统和策略测试的论坛
通用类库 - 错误、描述、问题、使用和建议
Sergey Dzyublik, 2017.12.09 01:12
熟悉了CHashMap 的实现
说实话,我很喜欢它。
有几个可能的改进建议。
1)在我看来,实现中包含了不太正确的容量选择--包括初始大小3和重建哈希表时的后续容量。
是的,应该选择一个素数来实现分布的均匀性,这是正确的。
然而,CPrimeGenerator的实现并不符合预期,包含了质数的遗漏。
这样一个 "生成器 "的目的很明确--提供一个增量系数为1.2的自动生成素数。
然而,这个系数不是太小了吗?在C++中,对于向量来说,系数通常是1.5-2.0,这取决于库(因为它强烈地影响着操作的平均复杂性)。
出路可能是一个常数系数,然后通过对素数列表的二进制搜索,将数字四舍五入 到素数。
而3的初始规模太小了,我们不是生活在上个世纪。
2) 目前哈希表只有在容量100%满时才会被重建(调整大小)(所有m_entries[]都被填满)。
正因为如此,对于分布不是很均匀的钥匙,可能会有很多碰撞。
作为一种选择,考虑引入一个填充因子,通过必要的限制来减少100%,以执行哈希表重建。
在实践中,有没有人对成千上万的交易进行过操作?
是的,数百万次的历史电话一传十十传百,很多人都在练习。
关于堡垒的每一个第一。
这很清楚。
通过hft算法发送订单 和拿起它们进行分析是不同的事情。发送时不需要这些哈希值,分析时也不需要,因为它们是以不同方式分析的。
所以,没有冒犯的意思。你还需要理论。
这很清楚。
通过hft算法发送订单和稍后拿起它们进行分析是不同的事情。你不需要这些哈希值来发送,你也不需要它们来分析,因为这不是正在分析的东西。
所以,没有冒犯的意思。我们也需要理论。
我不使用洗碗机,我使用海绵。
完全没有冒犯的意思。洗碗机很蹩脚,它们有什么用。
这很清楚。
通过hft算法发送订单和以后提出来分析是不同的事情。你不需要这些哈希值来提交它们,你也不需要它们来分析,因为我们事后会分析其他东西。
所以,没有冒犯的意思。我们也需要理论。
什么恩怨情仇?继续写你的拐杖。
简要介绍一下CHashMap 的当前实现情况
谢谢,我将在解析源代码时使用它。
什么恩怨情仇?继续写你的拐杖。
谢谢,我将在解析来源时使用它。
在添加新的键值对时,省略了对容器中键是否存在的检查,先执行。
但这并不重要。
请在整个 "通用 "中修复这样的东西。