用于评估对象顺序的数据结构是什么?

时间:2011-03-21 16:36:31

标签: algorithm data-structures

我正在尝试找出以下问题的最佳实现:

假设我们有一个类A,它代表一个复杂的数学对象,并且在构造时最初保持所有必需的内在状态。对于a_i的每个对象A,可以计算最终数值,这取决于其他a_j j < ia_0的非平凡方式众所周知。此外,导致最终答案的方程需要一个特殊的评估顺序,并且可以定义a_i的比较运算符。

我想要做的是首先创建所有需要的a_i,将它们推入一些有序的数据结构,最后以正确的顺序遍历结构以获得最终结果。

现在回答真正的问题:我通常使用哪种数据结构来实现评估订单的结构?二进制堆?或者我只是使用std :: vector并在之后对其进行排序?

谢谢!

2 个答案:

答案 0 :(得分:1)

如果可以根据评估顺序定义a_i的比较运算符(比如说小于),则自然容器将是std :: set。使用std :: set :: iterator遍历地图将按递增顺序生成每个a_i,这将是您的评估顺序。例如

std::set<A> aMap;
A a_i;
... // You create the rest of the A's
aMap.insert(a_i);
aMap.insert(a_j);

for (std::set<A>::iterator aIter = aMap.begin(); aIter != aMap.end(); ++aIter) {
    // Do your evaluation
}

答案 1 :(得分:0)

我建议使用矢量和交换功能。如果数学公式返回true,则循环遍历数组中的每个元素并与数组中的前一个元素交换。

你的循环必须循环遍历向量中的每个元素,并且内部还有一个循环,循环遍历当前索引向量项之前的所有元素。这个内部循环将包含您的数学公式检查,即排序逻辑。

希望这能让您了解该怎么做。如果您需要一些伪代码,请给我发表评论。