制作一个网站怎么做,wordpress 搜索 标题 内容,网站模板中企动力,三网合一网站源代码利用之前的哈希桶封装出unordered_map和unordered_set。
这个封装并不简单#xff0c;迭代器的使用#xff0c;模板参数的繁多#xff0c;需要我们一层一层封装。
map是一个k - v类型#xff0c;set是k类型#xff0c;那么就明确了如果需要封装#xff0c;底层的tables…利用之前的哈希桶封装出unordered_map和unordered_set。
这个封装并不简单迭代器的使用模板参数的繁多需要我们一层一层封装。
map是一个k - v类型set是k类型那么就明确了如果需要封装底层的tables必须能接收 K-T类型。在上层就能用K,pairK,V封装map ,利用K,K封装set 修改结构K-V T
1.底层不关心是K还是pair 利用T代替。 2.哈希桶的参数修改为T 为什么需要单独传入一个K的key
为了方便 erase和find通过第一个参数就能统一操作 3.关于仿函数
map的插入会是一个键值对set是一个单词。它们的上层是不一样的。
因此这里借用仿函数获取map和set的key
map和set都会接收T,map返回pair的第一个元素set直接返回key 故底层的哈希桶需要传入仿函数 使用insert的实现就是附用哈希桶的insert
我们不关心是pair还是key都是统一被处理。
注意在哈希桶中的inset还有find我们调用不了kv.first我们要利用仿函数kot获取key。 底层迭代器
需要给迭代器传入哈希桶它的参数应该有K,T,KeyOfT,Hash函数。
因为在迭代器必定有引用和指针故参数多增加为K,T,T*,T,KeyOfT,Hash 关于在哈希桶中调用迭代器在迭代器中需要哈希桶的参数。 故需要前置声明 迭代器的参数
结点、哈希桶的指针hashi当前在哪一个桶上 迭代器
寻找一个不为空的桶往下遍历链表如果当前桶结束则继续寻找下一个不为空的桶遍历直到找到结尾。 返回值是自身的迭代器返回this即可。 基本操作 * - 构造普通迭代器和常迭代器
为了保证迭代器不能被修改需要再实现一份const迭代器
const迭代器的实现是附用普通。 在哈希桶中使用迭代器
begin()
需要返回一个迭代器类型 _tables[i] this, i 的返回值就能传入结点哈希表hashi 哈希桶的end()
返回空结点 当前表-1 封装map
begin和end 调用底层哈希桶的迭代器 修改insert的返回值为pair 底层修改
哈希桶的insert第一个参数迭代器类型利用新插入的node构造 operator[ ]
返回值为 键值对的 V
调用insert插入
pair的second是bool类型bool代表在不在若插入成功返回true插入失败返回false但是会返回之前已经存在并且相同类型的迭代器 封装set
set的封装要点是inser插入
要针对key不可修改返回的是const迭代器。
利用auto自动推演出ret再用ret构造出const迭代器权限缩小和bool
最后构造pair