c++键值关系

C++ Key Value Relationship

本文关键字:关系 键值 c++      更新时间:2023-10-16

我想将X, Y和距离的组合存储在一个数据结构中。其中X和Y是整数。distance是X和y之间的距离

在c++中使用的最佳数据结构是什么,以便我以后可以找到列表中是否存在组合?

用合适的哈希值生成std::unordered_set

您可能希望使用std::set作为存储。您将需要/需要一个将坐标考虑在内的比较函数(距离直接从它们派生,因此您实际上不需要比较它)。

编辑:根据评论,涉及的点很多,std::unordered_set可能是更好的选择。它可能会做更多的工作,但允许插入和搜索的复杂性,您通常期望是恒定的。

EDIT:问题改变了,纬度/经度消失了,一些事情已经澄清。我重新开始:

你的问题似乎暗示距离计算不仅仅是一个简单的std::abs(X-Y),因为存储结果来加快速度根本没有意义。我假设你有一个昂贵的函数来计算它,比如:

int distance( int X, int Y ) { /* heavy stuff */ }

现在需要决定是否调用它,或者是否已经调用了,并且可以重用结果。您需要一个容器来存储结果和一个函数来使用它:

typedef std::pair< int, int > key;
std::map< key, int > values;
int quick_distance( int X, int Y )
{
  const auto k = key(X,Y);
  const auto it = values.find(k);
  if( it != values.end() ) return it->second;
  const auto d = distance(X,Y);
  values[k] = d;
  return d;
}

看看std::pair,它们就是为此目的而创建的,您可以在容器中使用与这种数据结构相关的改进。

what-is-stdpair

时间以前我写了一些使用数据对从微控制器图形串行数据,检查https://github.com/jpcordovae/GLRealTimeGraphics/blob/master/DataPair.hpp,也许它会帮助你。

问候!

JP Cordova E.