You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决multimap存储最近点时的数据重复问题?

解决最近点配对重复的思路

我明白你现在遇到的问题了——当计算每个点的最近点时,出现了双向重复的关联(比如25的最近点包含26,26的最近点也包含25),导致multimap里的数据冗余。下面给你几个实用的解决逻辑:

思路1:基于键值大小过滤,只保留单向配对

因为你的点标识是可比较的整数,我们可以约定只存储键小于值的配对,这样就能自动避免反向的重复项。具体操作步骤:

  • 当你要往multimap<int, int>中添加<x, y>时,先判断x < y是否成立
  • 如果成立,就正常添加;如果x >= y,直接跳过该配对

比如你的例子中:

  • 25和26:25<26,保留25:26;而26和25:26>25,跳过26:25
  • 25和27:25<27,保留25:27;27和25:27>25,跳过27:25
  • 26和27:26<27,保留26:27

处理后的multimap就会变成:
[[25:{26,27}], [26:{27}]],完美去除了双向重复项。

思路2:先收集所有配对,再批量去重

如果不想在添加时过滤,也可以先把所有配对收集到一个临时容器里,再去重:

  • 用set<pair<int, int>>存储所有<x, y>配对,集合会自动按顺序排序
  • 遍历这个集合,只保留first < second的配对,再将这些配对导入到multimap中
  • 或者用哈希集合(比如unordered_set<string>),把配对转换成格式化字符串(如to_string(x) + "-" + to_string(y)),每次添加前检查反向字符串(to_string(y) + "-" + to_string(x))是否已存在,不存在再添加

思路3:优化计算流程,避免重复计算距离

从根源上减少重复配对的产生:

  • 先将所有点按标识或索引排序
  • 遍历每个点x时,只和排在x之后的点计算距离
  • 当找到x的最近点y时,只给x添加y作为最近点;同时检查y当前的最近点是否距离更远,如果是,就把x设为y的最近点(这样就不用后续再处理y和x的配对了)

这个方法能减少一半的距离计算量,同时避免生成反向重复项。


内容的提问来源于stack exchange,提问作者user8619267

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:03:52