【问题标题】:standard and efficient map between objects对象之间的标准高效映射
【发布时间】:2015-07-22 15:43:11
【问题描述】:

我正在研究聚类问题,我有一个叫做距离矩阵的东西。这个距离矩阵类似于:

  1. 节点数(g)为N(动态)
  2. 这个矩阵是对称的 (dist[i,j]==dist[j,i])
  3. g1,g2,.. 是对象(它们包含字符串、整数,甚至可能更多..)
  4. 我希望能够通过 dist[4][3] 之类的简单方式或 dist(g1,g5) 之类更清晰的方式达到任何值(这里 g1 和 g5 可能是某种指针或引用)
  5. 许多标准算法将应用于此距离矩阵,例如 min、max、accumulate ..等
  6. 最好但不是强制性的,我不想使用 boost 或其他 3rd 方库

声明此矩阵的最佳标准方法是什么。

【问题讨论】:

  • 可能的答案太多,或者对于这种格式来说,好的答案太长了。请添加详细信息以缩小答案范围或隔离可以在几段中回答的问题。
  • 我会使用三个向量。一个存储行名,一个存储列名,一个存储距离值。
  • @barry 我认为这可能是一个著名的问题,因为许多在机器学习领域工作的人可能曾经遇到过它。但是,我会看看是否可以提供更多详细信息.. 谢谢

标签: c++ c++11 matrix multidimensional-array


【解决方案1】:

你可以像这样创建二维向量

std::vector<std::vector<float> > table(N, std::vector<float>(N));

不要忘记像这样初始化它,它为 N 个成员保留内存,因此不需要重新分配所有成员然后添加更多成员。并且不会碎片化记忆。 你可以像这样访问它的成员

table[1][2] = 2.01;

它并不总是使用复制构造函数,因为向量索引运算符返回对成员的引用; 所以如果 N 不需要改变,它是非常有效的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-03
    • 1970-01-01
    • 2019-05-13
    • 1970-01-01
    • 2019-09-19
    相关资源
    最近更新 更多