2013-02-28 80 views
0

我想将X,Y和距离的组合存储在数据结构中。 其中X和Y是整数。 距离是X和Y之间的距离。C++键值关系

这将是最好的数据结构在C++中使用,以便我可以在以后找到组合是否存在于列表中?

+0

什么是?请给更多的背景 – tlehman 2013-02-28 23:17:21

+0

他意味着关键,价值的关系。我有一个待处理的标题编辑为 – 2013-02-28 23:18:08

+0

您的列表有多大?你怎么访问它很多?你可以在vector中使用2 int/float/double的类/结构体。如果你没有很多点迭代只使用矢量,那么地图将更快地查找。哈希映射甚至更快。所以请告诉我们更多的细节 – Gilad 2013-02-28 23:21:31

回答

2

您可能想要使用std::set作为存储。你需要/需要一个比较函数来考虑坐标(距离直接从它们派生出来,所以你不需要比较它)。

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

2

用适当的散列表示该std::unordered_set

1

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

你的问题似乎意味着距离计算不仅仅是一个简单的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; 
} 
+0

基本上我想要做的是计算2点之间的距离,并在数据结构中存储点和距离。稍后查找点是否已经存在于该数据结构中,如果是,则返回距离或者计算点之间的距离并插入到数据结构中。 – Angel 2013-02-28 23:45:11

+0

是的这正是我想要做的。我有一个复杂的函数来计算距离,我想重复使用距离值,而不是每次重做。谢谢:)它帮了很多 – Angel 2013-03-01 00:07:19

+0

values [k] = d;除了values.insert(k,d);对 ? – Angel 2013-03-01 00:21:49