gpt4 book ai didi

C++ 如何做 2 将结果排序并合并到 1

转载 作者:行者123 更新时间:2023-11-28 07:53:43 25 4
gpt4 key购买 nike

父类:

Character

子类:

Elf
Human

我有一个变量是

int myScore;
string myType;

所以我所做的是按 myType 排序,然后按分数升序排序

表示如果我有这样的记录

[1] Human, 99
[2] Elf, 91
[3] Elf, 99
[4] Human, 99

如果排序会是

[1] Human, 90 
[2] Human, 99
[3] Elf, 91
[4] Elf, 99

听说合并功能可以将2排序合并为1

但是我该如何使用它。

我现在做的是

在 character.cpp

struct sort_by_score
{
static bool operator()(Character* x, Character* y)
{
return x->getScore() < y->getScore();
}
};

在main.cpp

这是我做的

int main()
{
Character *chara[100];
vector<Character*> sortVector;

//some input of value here.. assuming now got 4 pointers to object, 2 human 2 elf.

sortVector.clear();
sortVector.assign(chara,chara + characterCounter);

//here i got question on how to sort by Human Then Elf

//2nd sort is sort by score
sort(sortVector.begin(), sortVector.end(), sort_by_score());

for (int i=0;i<characterCounter;i++)
{
cout << sortVector.toDisplay() << endl;
}

return 0;
}

感谢大家的帮助!!

最佳答案

您也可以使用 lambdas (C++0x/11) 轻松完成此操作:

vector<Character> v = ...;

sort(v.begin(), v.end(), [](const Character &lhs,const Character & hs){
return lhs.getType() == rhs.getType() ? lhs.getScore() < rhs.getScore()
: lhs.getType() < lhs.getType();
});

或者对于指针:

vector<Character*> v = ...;

sort(v.begin(), v.end(), [](const Character *lhs,const Character * hs){
return lhs->getType() == rhs.getType() ? lhs->getScore() < rhs->getScore()
: lhs->getType() < lhs->getType();
});

我找不到“条件组合器”,所以我自己写了一个。这应该有效:

template<class T, class First, class Second>
class combine {
First first;
Second second;
public:
bool operator()(const T & lhs, const T & rhs) const {
if(first(lhs, rhs)) return true;
if(first(rhs, lhs)) return false;
return second(lhs, rhs);
}
};

有两个基本的比较仿函数

struct less_type
{
static bool operator()(const Character & lhs, const Character & rhs) {
return lhs.getType() < rhs.getType();
}
};
struct less_score
{
static bool operator()(const Character & lhs, const Character & rhs) {
return lhs.getScore() < rhs.getScore();
}
};

可以像下面这样使用:

vector<Character*> v = ...;

sort(v.begin(),v.end(), combine<Character,less_type,less_score>());

这在不支持 C++0x lambdas 的情况下也可以工作。

关于C++ 如何做 2 将结果排序并合并到 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13208586/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com