我想将 X、Y 和距离的组合存储在数据结构中。其中 X 和 Y 是整数。distance 是 X 和 Y 之间的距离。
哪个是在 c++ 中使用的最佳数据结构,以便我以后可以找到该组合是否存在于列表中?
我想将 X、Y 和距离的组合存储在数据结构中。其中 X 和 Y 是整数。distance 是 X 和 Y 之间的距离。
哪个是在 c++ 中使用的最佳数据结构,以便我以后可以找到该组合是否存在于列表中?
您可能希望std::set
用于存储。您需要/需要一个将坐标考虑在内的比较函数(距离直接来自它们,因此您实际上不需要比较它)。
编辑:基于涉及大量点的评论,std::unordered_set
可能是更好的选择。它可能会做更多的工作,但允许插入和搜索的复杂性通常是不变的。
使用std::unordered_set
适当的哈希值来实现。
编辑:问题改变了,纬度/经度消失了,有些事情已经澄清。我重新开始:
您的问题似乎暗示距离计算不仅仅是一个简单的 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;
}
看看 std::pair,它们是为此目的而创建的,您可以在与这种数据结构相关的容器中使用改进。
前段时间我使用数据对从微控制器的图形串行数据中写了一些东西,请查看https://github.com/jpcordovae/GLRealTimeGraphics/blob/master/DataPair.hpp,也许它会对你有所帮助。
问候 !
JP科尔多瓦E。