c++ - 当排序标准需要额外的变量时,如何对列表进行排序? C++

标签 c++ sorting list

这是一项作业,所以我会故意笼统。我的问题与我已经做出的实现决定有关——也许它们不是很好。

我有一个指向结构的指针列表,例如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; 的东西但我认为,我刚才描述的方式是我知道如何进行排序的唯一方式,而且我不知道如何将我的计数器作为附加参数传递。如何对这个指针列表进行排序?

预计到达时间:计数器只是 main 中的一个变量。所以理想情况下我可以调用类似 bob.sort(sortbyratio, counter); 的东西或 sort(bob.begin(), bob.end(), sortbyratio, counter);

最佳答案

类似于 ltcmelo 的示例,但如果对象本身不包含计数器:

struct sort_with_counter {
    sort_with_counter(const double d): counter(d) {}

    bool operator()(const MyStruct* a, const MyStruct* b) {
        return(counter*a->arrival < counter*b->arrival);
    }

    const double counter;
};

mylist.sort(sort_with_counter(5.0));

如果你的计数器是一个像这样的外部变量,尽管它不会影响排序(至少如果它是正的 - 谢谢 onebyone!) - 所以这实际上可能根本没有必要(或者我误解了你的意思)之后?)。不过,在其他情况下,这是一种有用的技术。

关于c++ - 当排序标准需要额外的变量时,如何对列表进行排序? C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1557570/

相关文章:

C++ push_back 到数组中更改对象的变量

sorting - Hadoop 对值进行二次排序。对松散的值(value)观进行分类

algorithm - 具有不均匀分割的合并排序变异?

python - Jinja2:将一个列表中的项目与另一个列表中的项目进行比较

Python - 按不均匀列表对元组列表进行排序

c++ - 结构 : errors with initializers

c++ - 当窗口关闭时,我的析构函数会被调用吗?

C++,加载文本的函数忽略最后几行,只有一些 .txt 文件

algorithm - 我的合并排序代码返回相同的输入数组

python - 在单个字典理解中插入列表和切片