使用什么数据结构?

时间:2010-10-25 14:08:27

标签: c++ c data-structures

我需要一个具有以下属性的数据结构:

  • 访问元素必须非常快
  • 未添加的元素不应占用内存(理想情况下,空结构的大小接近零)
  • 每个元素都有两个整数坐标(x,y)(仅由它们访问元素)
  • 创建时已知的元素的最大数量(超过10 ^ 3)
  • 元素包含少量浮点值

如果您还使用C或C ++指导此结构的实现,那将是一件好事。

4 个答案:

答案 0 :(得分:7)

您在寻找sparse matrix吗?

答案 1 :(得分:3)

检查一下 - 你可以将元素类型改为float,如果这样可以做你想做的一切。

Concise Sparse Matrix Package in C

对于C ++,您可以使用Boost.uBLAS - sparse_matrix详细信息here

答案 2 :(得分:1)

如果你的X和Y相对较小,那么二维指针数组就可以了。在32位代码中,10000个指针将是40K。

答案 3 :(得分:1)

typdef ElementAccessor std::pair<int, int>;

struct Element
{
  float f1;
  float f2;
  //etc.

};

std::map< ElementAccessor, Element > myElementMap;

您现在可以将此地图用作矩阵。 ElementAccessor引用x,y。只需确保在尝试访问该元素之前查看该元素是否存在,或者默认情况下创建一个元素。

http://www.cplusplus.com/reference/std/utility/pair/ http://www.cplusplus.com/reference/stl/map/find/

编辑:模板括号显示在地图上。 map键类型为ElementAccessor,值为Element。此外,对于该对,模板是int,int。