стабильная сортировка — stable_sort в переполнении стека

Я пытаюсь использовать stable_sort для сортировки вектора указателей

в определенный класс. У меня есть такой код:

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

class B
{
public :
B(int y, int j) {x = y, r = j;};

void getVal() {cout << x << endl; };

int x;
int r;
};bool compareB(B* b1, B* b2)
{
return b1->getVal() < b2->getVal();
}

int main()
{
B b1(3, 4), b2(-5, 7), b3(12, 111);

vector<B*> myVec;
myVec.push_back(&b1);
myVec.push_back(&b2);
myVec.push_back(&b3);

std::stable_sort(myVec.begin(), myVec.end(), compareB);
for (size_t size = 0; size < myVec.size(); ++size)
{
myVec[size]->getVal();
}

return 0;
}

Тем не менее, я получаю ошибку при компиляции:

«ошибка: недопустимые операнды типов« void »и« void »в бинарный оператор»<‘
вернуть b1-> getVal () < В2> GETVAL ();»

Кто-нибудь может мне помочь ?

0

Решение

Проблема с

void getVal() {cout << x << endl; };

Возвращается void вместо какой-то стоимости.

Когда вы используете его в return b1->getVal() < b2->getVal(); сводится к return void < void; который не будет компилироваться.

Вы должны быть в состоянии изменить его на

int getVal() { return x; };
4

Другие решения


По вопросам рекламы [email protected]