当前位置: 首页 > news >正文

从零开始手写STL库:multimap

从零开始手写STL库–multimap的实现

Gihub链接:miniSTL


文章目录

  • 从零开始手写STL库–multimap的实现
  • 一、multimap是什么?
  • 二、multimap要包含什么函数
  • 总结


一、multimap是什么?

如图multiset之于set,multimap相当于允许map重复储存键值

所以这里也是增加一个count来计数吗?这里是不可以的

multiset用count是因为key和value相同,而map的key和value是不同的

如果也用count来计数,那么考虑<1,2>和<1,5>的插入,由于key相同,所以后插入的会丢失,这显然不对

所以这里的想法是把红黑树的节点做成list,把所有key相同的值放在一个list中

二、multimap要包含什么函数

明确了设计思路,实际上就是红黑树的一层封装了

如下:

template <typename Key, typename Value> class MultiMap
{
public:using ValueType = std::list<Value>; MultiMap() : rbTree(), size(0) {}void insert(const Key &key, const Value &value) {ValueType *existingValues = rbTree.at(key);if (existingValues) existingValues->push_back(value);else {ValueType values;values.push_back(value);rbTree.insert(key, values);}size++;}void remove(const Key &key) {ValueType *existingValues = rbTree.at(key);if (existingValues) {size -= existingValues->size();rbTree.remove(key);}}void remove(const Key &key, const Value &value) {ValueType *existingValues = rbTree.at(key);if (existingValues) {existingValues->remove(value);size--;if (existingValues->empty()) rbTree.remove(key);}}ValueType *at(const Key &key) { return rbTree.at(key); }int getSize() { return size; }bool empty() { return size == 0; }private:myRedBlackTree<Key, ValueType> rbTree; size_t size;
};

总结

了解list作为节点代替红黑树常用节点即可,这是multimap实现的基本原理,其他考察点与map相同


http://www.mrgr.cn/news/38320.html

相关文章:

  • 电子连接器信号完整性仿真实训教程 一
  • 【C++】C/C++内存管理(new/delete)
  • 《开题报告》基于SSM框架的电影评论网站的设计与实现源码++学习文档+答辩讲解视频
  • 胤娲科技:AI界的超级充电宝——忆阻器如何让LLM告别电量焦虑
  • Linux用户管理
  • 模拟实战数据落地:MSsql通过存储过程获得销售数据视图
  • 如何存储你需要的信息:变量——WEB开发系列42
  • 【算法系列-数组】长度最小的子数组(滑动窗口)
  • lDE 使用技巧与插件推荐(含案例说明)
  • 如何评估婚恋交友小程序的投资回报率
  • 小阿轩yx-案例:代码管理系统简介与部署
  • 数据结构与算法——Java实现 21.栈
  • 数据结构——二叉树的性质和存储结构
  • 干货|CNAS-CL01设备部分解读,透彻掌握软件测试实验室设备关键点
  • 探索后量子安全:基于格加密技术的未来密码学展望
  • Goland使用SSH远程Linux进行断点调试 (兼容私有库)
  • 高等数学 第11讲 多元函数偏导数的计算与应用_复合函数求偏导_隐函数求偏导_条件极值
  • 计算机毕业设计Python+Spark知识图谱微博舆情预测 微博推荐系统 微博可视化 微博数据分析 微博大数据 微博爬虫 Hadoop 大数据毕业设计
  • AI在教育行业应用的启发和未来的方向
  • Java 匿名内部类