• (1)single key value 的 map 容器,一个位置一个值,对应于一个一维数组(或者向量)

    y=f(x)

    y=f(x)

  • (2)double key value 的 map 容器,对应于一个二维的矩阵

    z=f(x,y)

    z=f(x, y)

对于 double key 的实现,我们选择<utility> 头文件中的std::pair<size_t, size_t>

自定义比较用的仿函数

STL map 容器的第三个模板参数为用于比较 value 大小的仿函数(重载了operator() 括号运算符) ,std::pair 类型对象的大小,我们需要自定义相关的用于比较的仿函数

typedef std::pair<size_t, size_t> Pair;// 对 double key 的相对位置不敏感的比较仿函数,[1, 2] == [2, 1]
class compare_a
{
public:bool operator()(const Pair& x, const Pair& y) const{size_t xmin, xmax, ymin, ymax;x.first > x.second ? (xmin = x.second, xmax = x.first) : (xmin = x.first, xmax = x.second);if (xmin < ymin) return true;else if (xmin == ymin){if (xmax < ymax)return true;return false;}else return false;}
};// 对 double key 的相对位置敏感的,[1, 2] ≠ [2, 1]
class compare_b
{
public:bool operator()(const Pair& x, const Pair& y) const{if (x.first < y.first)return true;else if (x.first == y.first){if (x.second < y.second)return true;elsereturn false;}elsereturn false;}
};

double key map 的实现

template<typename T, typename C>
class DoubleKeyMap
{
public:typedef typename std::map<Pair, T, C>::value_type value_type;typedef typename std::map<Pair, T, C>::iterator iterator;typedef typename std::map<Pair, T, C>::const_iterator const_iterator;std::pair<iterator, bool> add_item(size_t i, size_t j, const T& val){return _map.insert(std::make_pair(Pair(i, j), val));}bool contain_key(size_t i, size_t j) const{auto pos = _map.find(Pair(i, j));return pos != _map.end();}const T& operator()(size_t i, size_t j) const{assert(contain_key(i, j));return _map[Pair(i, j)];}T& operator()(size_t i, size_t j){assert(contain_key(i, j));return _map[Pair(i, j)];}void clear(){_map.clear();}iterator begin();const_iterator begin() const;iterator end();const_iterator end() const;private:// std::map<Pair, T, C> _map;
};
typedef DoubleKeyMap<double, compare_a> DoubleMapA;
typedef DoubleKeyMap<double, compare_b> DoubleMapB;

double key map 的实现相关推荐

  1. golang key map 所有_Golang面试知识点总结

    根据多次面试经历,总结下golang开发需要掌握的知识点 1.slice和数组的区别 slice是数组的快照,slice底层数据是一个结构体,包含三个元素,长度.容量和数组指针.所以slice的赋值就 ...

  2. golang key map 所有_Map的底层实现 为什么遍历Map总是乱序的

    Golang中Map的底层结构 其实提到Map,一般想到的底层实现就是哈希表,哈希表的结构主要是Hashcode + 数组. 存储kv时,首先将k通过hashcode后对数组长度取余,决定需要放入的数 ...

  3. new Map()详细介绍 map .set(key,value)map.sizemap.get(key)map.has(key)map.delete(key)map.clear()

    1.let map = new Map();     2.let map = new Map([[key,value],[key,value]]); //默认带初始化参数的定义 理解就是:new Ma ...

  4. key map 模糊查找_使用Map和模糊查询

    Map和模糊查询 在某些时候我们只需要给MyBatis传递几个参数而不是一个完整的对象,如仅仅update表中的两三个属性.此时parameterType设置为一个pojo显然不合适.可以考虑使用Ma ...

  5. 关于The requested list key 'map' could not be resolved as a collection/array/map/enumera...

    今天在动态导入select选项内容的时候(用的<s:select>标签)    报出如下错误: 严重: Servlet.service() for servlet jsp threw ex ...

  6. key map 模糊查找_lua脚本语言批量删除模糊查询的key

    1. DEL 直接加键名称 DEL key1 key2 key3 127.0.0.1:6379>  DEL site_msg_99973  false site_msg_99974   fals ...

  7. [Swift]LeetCode853. 车队 | Car Fleet

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  8. 第 258 场周赛(5867. 反转单词前缀/ 5868. 可互换矩形的组数 / 5869. 两个回文子序列长度的最大乘积(状态压缩) / 5870. 每棵子树内缺失的最小基因值(小大合并))

    第 258 场周赛 从这次开始还是把题目加上名字吧,要不然想找找不到题,哈哈 字节的周赛,还想冲个200来着,最后一题按二叉树写的,用例还能过,一提交,发现多叉的...来不及改了..400多名 586 ...

  9. c++ map iterator 获取key_前K个高频的元素衍生之Map的Value与Key排序

    前言 本篇文章总结来自九月份的每日一题 347-前K个高频的元素 思考 对于系列的题目就是计算利用到Hash表的属性的Key与Value的双属性,能够满足我们后面计算对于每一个元素出现的频率的同时还能 ...

最新文章

  1. java---switch
  2. winform list集合怎么 in过滤_python3基础04字典(dict)和集合(set)
  3. 大数据概论ppt_解读 | 货拉拉搬家大数据报告(30页PPT干货)
  4. C++|Java混合实验-java搭建post方法靶场,Qt发送请求获取数据
  5. 路由技术(来自百度百科)
  6. python模块之wordcloud
  7. PowerDesign
  8. 安装vum、npm、cnpm、vue/cli
  9. 地址规范化--城市三级联动(layui) (B)
  10. 方舟手游服务器设置文件翻译,方舟生存进化单机模式设置中英文对照翻译一览...
  11. 论文解读:预测lncRNA的相互作用生物分子类型:一种集成深度学习方法
  12. java int类型 BigDecimal类型转成汉字金额大写
  13. WeCode在线少儿编程-中美教育大对比,让孩子学习更高效
  14. 《信号与系统》自然/受迫响应、零输入/零状态响应及系统初始状态
  15. jQuery实现平年闰年判断
  16. unity+Cardboard SDK VR开发Cardboard Unity SDK讲解
  17. Docker命令详解
  18. 肖特基二极管检波电路设计与分析
  19. 计算机 实验室安全准入制度,实验实训室安全准入制度(试行)
  20. 中小企业管理中存在的问题及对策

热门文章

  1. python数据分析与展示 嵩天_Python数据分析与展示第2周学习笔记(北理工 嵩天)...
  2. 使用shiro框架的项目增加忘记密码功能遇到的一些问题
  3. linux安装mysql5.6rpm_centos6.5 下安装mysql5.6,rpm方式
  4. mysql mgr写入_社区投稿 | MySQL MGR一致性读写特性解读
  5. hbase建表语句_HBase 中文参考指南真不少~
  6. 计算两个正整数的最大公约数
  7. Linux基础——Linux 基本指令 touch, cp 和 mv
  8. OpenCV精进之路(二十):工具——图像标注小工具
  9. [转帖]ESXi 网卡绑定 增加吞吐量的方法
  10. PAPI性能测试工具的安装、使用及实例