【发布时间】:2010-12-06 04:00:15
【问题描述】:
这是一个任务,所以我会故意笼统地说。我的问题与我已经做出的实施决策有关——也许它们不是好的决策。
我有一个指向结构的指针列表,例如list<MyStruct*> bob; 在某一时刻,我需要按目标的数据成员之一对这些指针进行排序,而我可以很容易地做到这一点
bool sortbyarrival(const MyStruct* a, const MyStruct* b) {
return a->arrival < b->arrival;
}
然后调用bob.sort(sortbyarrival); 效果很好。
现在我需要在其他地方按不同的标准进行排序,这涉及程序中的计数器。我需要像return counter*a->arrival < counter*b->arrival; 这样的东西,但我认为,我刚才描述的方式是我知道如何进行排序的唯一方法,而且我不知道如何将我的计数器作为附加参数传递。如何对这个指针列表进行排序?
ETA:计数器只是 main 中的一个变量。所以理想情况下我可以打电话给bob.sort(sortbyratio, counter); 或sort(bob.begin(), bob.end(), sortbyratio, counter);
【问题讨论】:
-
list是 STL 的std::list,还是其他类型? -
我很困惑。两边乘以
counter有什么作用? -
我想我把这个任务伪装得太多了。我正在尝试按惩罚比率对某些内容进行排序,因此在真正的问题中,我将当前时钟时间除以结构的成员以得出一个比率,我想以此对列表进行排序。
-
对于一个正常数 k,
(k / x) < (k / y)当且仅当y < x(假设没有零,并且 x 和 y 具有相同的符号。如果它们具有不同的符号,则负数是较小的有或没有互惠)。所以只需按相反的顺序排序,并为自己节省一些浮点废话。这是因为对于正 k,f(x) = k/x 是 0 两边的单调递减函数,在 0 处不连续。 -
@onebyone:你说得对,这没有任何意义。你让我回过头来更仔细地研究这个问题。它实际上是 (k - 我差点忘记的东西) / x。感谢您意识到这一点并让我检查。