c++键值关系
C++ Key Value Relationship
我想将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.
相关文章:
- 使用一个考虑到std::map中键值的滚动或换行的键
- 如何使用 std::variant 打印地图键/值?
- 当键值是 std 向量时,为什么使用 at in C++ 访问映射值如此缓慢?
- C++ 映射的键/值的用户自定义名称?
- 试图(稍微)概括C++模板.关联容器键:值反转
- 更改多重映射容器中所有元素的键值
- 如何使用C++和Boost Asio从HTTP发布请求中获取键值
- 插入新键时,它会更改现有键值的地址吗?
- 在C++中共享键值对的最佳方式
- 使用无序映射在STL中存储键值对
- c++同一个键的多个键/值对
- 如何优化C++键值程序以获得更快的运行时间
- C++中的键值对:<val1, val2> 键<frequency>与值一样
- 在 std::unordered_map 中插入新的键/值对会导致"out of range"异常
- 如何将 JSON 键值(我使用 cpp boost 解析)存储在相关数据结构中?
- 读取数组中每个对象的所有键值对
- 如何从 c++ 列出 BDB 中的键/值
- 查找函数在unordered_map中的工作方式是搜索键值
- 这C++ unordered_map怎么有四个值?我以为这是一个键值对
- c++键值关系