Сборка выдаёт ошибки C++ Visual Studio 2019

Ошибки в файле algorythm:

Ошибка C2676 бинарный "-": "const std::_List_unchecked_iteratorstd::_List_val<std::_List_simple_types<_Ty>>" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору Lab9 C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\algorithm 4138
Ошибка C2672 "_Sort_unchecked": не найдена соответствующая перегруженная функция Lab9 C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\algorithm 4138
Ошибка C2780 void std::_Sort_unchecked(_RanIt,_RanIt,iterator_traits<_Iter>::difference_type,_Pr): требует аргументов: 4, имеется: 3 Lab9 C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\algorithm 4138

Мой код

#include <iostream>
#include <list>
#include <algorithm>

using namespace std;

class Taburetka {
public:
    string material;
    string country;
    int size;

    Taburetka(string material, string country, int size) {
        this->material = material;
        this->country = country;
        this->size = size;
    }

    string getCountry() {
        return country;
    }
    
    string getMaterial() {
        return material;
    }
    
    int getSize() {
        return size;
    }

    void PrintObj() {
        cout << material << " " << country << " " << size << endl;
    }
};

struct comp {
    bool operator()(const Taburetka& a, const Taburetka& b)const {
        return a.size < b.size;
    }
};

void Sort_Size(list<class Taburetka> TAB) {

}

void Print_Vector_Class(list<class Taburetka>) {

}

int main(){
    list<class Taburetka> name;
    Taburetka doski("doski", "Finnland", 4);
    Taburetka nozhki("nozhki", "Kazakhstan", 4);
    name.push_back(doski);
    name.push_back(nozhki);
    for_each(name.begin(), name.end(), [](Taburetka x) {
        x.PrintObj();
        });
    sort(name.begin(), name.end(), comp()); 
    cout << endl;
    for_each(name.begin(), name.end(), [](Taburetka x) {
        x.PrintObj();
        });
    cout << endl;

    string material;
    cout << "material?" << endl;
    cin >> material;
    for_each(name.begin(), name.end(), [material](Taburetka x) {
        if (material == x.material) {
            x.PrintObj();
        }
        });
}

как исправить?


Ответы (2 шт):

Автор решения: user7860670

Алгоритм ::std::sort требует итераторов с произвольным доступом, которых контейнер ::std::list не предоставляет. Используйте ::std::vector или yo

→ Ссылка
Автор решения: EOF

Дело в том, что list имеет двунаправленные итераторы, а алгоритм sort требует итераторы произвольного доступа. Чтобы отсортировать list используйте функцию-член этого класса:

name.sort(comp());
→ Ссылка