c++ algorithm что то пошло не так

105
01 ноября 2021, 05:10

написал вроде все правильно, но не работает

использовал библиотеку algorithm, vector

Вот код

#include <iostream> //output, input
#include <string> //string
#include <thread> //thread
#include <chrono> //for units
#include <ctime> //for time(0)
#include <deque> //deque STL
#include <functional> //function
#include <vector> //vector STL
#include <algorithm>
    // namespaces //
using namespace std;
using namespace this_thread;
using namespace chrono;
class Student
{
public:
    Student(string name, unsigned short int age, unsigned short int rating)
    {
        this->age = age;
        this->name = name;
        this->rating = rating;
    }
    string GET_name(){return name;}
    int GET_age(){return age;}
    int GET_rating(){return rating;}

    string name;
    unsigned short int age;
    unsigned short int rating;
};
    // PROGRAM //
void Program()
{
    vector<Student> Peoples 
    {
        Student("Danil",13,786),
        Student("Andrey",49,861),
        Student("Masha",21,569),
        Student("Pasha",4,4),
        Student("Danil",15,891)
    };
    sort(Peoples.begin(),Peoples.end(),[](Student& one, Student& two){return one.GET_rating() > two.GET_rating();});
    auto koko = remove(Peoples.begin(),Peoples.end(),[](Student& a){return a.age < 10;}); //Error в вот этой строке
    Peoples.erase(koko,Peoples.end());
    cout<<"Имя\t\tВозраст\t\tБал\t\t\tВсего: "<<Peoples.size()<<"\n"<<endl;
    for(auto el:Peoples)
    {
        cout<<el.GET_name()<<"\t\t"<<el.GET_age()<<"\t\t"<<el.GET_rating()<<endl;
    }
}
    // main //
int main()
{
    const auto _BEGIN_ = high_resolution_clock::now();
    setlocale(LC_ALL,"ru");
    srand(time(0));
    cin.exceptions(ios::failbit | ios::badbit);
    Program();
    const auto _END_ = high_resolution_clock::now();
    const int TIME_FOR_PROGRAM = duration_cast<microseconds>(_END_-_BEGIN_).count();
    cout<<"\n\n\t\t\t\033[1;32mProgram completed in "<<TIME_FOR_PROGRAM<<"mcs\033[0m"<<endl<<endl;
}

я нарушил инкапсуляцию чтобы перебрать все варианты)

Вот ошибка:

Answer 1

Во-первых, remove принимает значение, с которым выполняется сравнение. Для применения предиката нужно использовать remove_if.

Далее, я бы рекомендовал заменить

const int TIME_FOR_PROGRAM = duration_cast<microseconds>(_END_-_BEGIN_).count();

на

const auto TIME_FOR_PROGRAM = duration_cast<microseconds>(_END_-_BEGIN_).count();

Тогда останется просто проигнорировать предупреждение в строке

srand(time(0));

или все же использовать более продвинутые возможности <random>.

READ ALSO
Как в Web Socket передать сообщение с custom name

Как в Web Socket передать сообщение с custom name

Подскажите пожалуйстаУ меня есть серверная и клиентская часть написанная на Web Socket

124
Render inside foreach

Render inside foreach

Изучаю JS + RN и пишу приложение с навигациейХочу отрендерить компонент в зависимости от переданных в него пропсов

78
Как реализовать переход по страницам сайта без обрывания музыки? (Как у Vk)

Как реализовать переход по страницам сайта без обрывания музыки? (Как у Vk)

Мне нужно каким-то образом нужно сделать так, чтобы при переходе на другую страницу моего сайта, музыка, которая играет у пользователя не обрывалась,...

135