0

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

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

4

4 回答 4

2

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

编辑:基于涉及大量点的评论,std::unordered_set可能是更好的选择。它可能会做更多的工作,但允许插入和搜索的复杂性通常是不变的。

于 2013-02-28T23:18:22.173 回答
2

使用std::unordered_set适当的哈希值来实现。

于 2013-02-28T23:19:17.570 回答
1

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

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

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;
}
于 2013-02-28T23:25:28.107 回答
0

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

什么是标准对

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

问候 !

JP科尔多瓦E。

于 2013-03-01T13:54:32.553 回答