如何比较两个用类

时间:2015-10-18 22:46:38

标签: c++ list stl

我正在为我的c ++课程编写程序而且我遇到了问题。对于这个项目,我不得不组建两个超级团队并进行模拟战斗。在我的main.cpp中,我为每个团队创建了两个列表,并为它们填充了一个代表每个团队3个字符的3个类。在类中,我有属性,其中一个属性是'双倍速'。我对这两个团队进行了排序,使得每个团队的第一个角色拥有最快的速度,然后是最快的。现在是我坚持的部分。我现在必须进行模拟,并且最快的整体特征首先是下一个最快的。首先,我不知道如何将对方队伍添加到我班级的列表中,其次,我不知道如何比较列表以查看谁先走了。我在班上创建了一个名为

的列表
list<super*>target

哪个是指针列表。当我创建团队时,我试图将相反的团队添加到我的目标列表中:

for(int i = 0; i < 3; i++) {
    hptr = new super;
    vptr = new super;

    TeamA.push_back(*hptr);
    TeamB.push_back(*vptr);

    hptr -> addtarget(vptr);
    vptr -> addtarget(hptr);
}

但是我的addtarget函数出错了:

void super::addtarget(super *tptr){

target.push_back(*tptr);

}

,错误信息为:

error: no matching function for call to 'std::list<super*>::push_back(super&)'

我已经坚持这个问题了几天,我似乎无法绕过它。我不想要如何做到这一点的确切代码,但只是一个先声,所以我可以尝试找出它。

2 个答案:

答案 0 :(得分:1)

1.add super到列表

TeamA.push_back(hptr);
TeamB.push_back(vptr);

我们可以从错误消息中看到target列表存储指向super对象的指针,因此您应该使用target.push_back(tptr)而不是target.push_back(*tptr); tptr指的是超级指针。 * tptr是super对象。

2.比较stl::list元素

您可以指定a custom sort predicate

bool compareSuper(const super* a, const super* b) {
    return (a->speed) > (b->speed);
 }

 TeamA.sort(compareSuper); // TeamA is in decreasing order after sort
 TeamB.sort(compareSuper); // TeamB is in decreasing order after sort

答案 1 :(得分:0)

首先,对于列表比较,您可以使用所需的逻辑编写自己的函数。

其次,addtarget函数有一点问题。您的target变量的类型为“超级指针列表”,但在行target.push_back(*tptr)中,您尝试将对象对象添加到列表而不是指向对象的指针。

第三,如果要合并两个列表,可以将list::merge与您的类的比较函数一起使用。关于合并,您可以read here