10 / 9 / 1
Регистрация: 11.07.2021
Сообщений: 132
1

Не работает функтор

25.07.2022, 19:07. Показов 730. Ответов 3
Метки c++, stl (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день. Подскажите пожалуйста, что я делаю не так? Программа падает на 60 строке.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <memory>
 
struct Review
{
    std::string title;
    int rating;
    double price;
 
    Review() : title(""), rating(0), price(0.0) {}
    Review(const std::string& t, int r, double p)
    : title(t), rating(r), price(p) {}
};
 
Review FillReview();
void ShowReview(std::shared_ptr<Review> shp);
bool NameInAlphabetical(const std::shared_ptr<Review>& shp1, const std::shared_ptr<Review>& shp2);
 
int main()
{
    std::vector<std::shared_ptr<Review>> vec;
 
    char ch = 'y';
    while (ch == 'y')
    {
        vec.push_back(std::make_shared<Review>(FillReview()));
        std::cout << "Contunie <y/n>: ";
        (std::cin >> ch).get();
    }
 
    std::cout << '\n';
    /*std::for_each(vec.begin(), vec.end(), ShowReview);*/
 
    ch = 'y';
    while (ch == 'y')
    {
        std::cout << "1 - Display books in original format\n" <<
            "2 - Display books in alphabetical order\n" <<
            "3 - In ascending order of rating\n" <<     // в порядке возрастания рейтинга
            "4 - In descending order of rating\n" <<    // в порядке убывания рейтинга
            "5 - In descending order of price\n" <<     // в порядке уменьшения цены
            "0 - Exit\n";
 
        int choice;
        std::cout << "Your choice: ";
        std::cin >> choice;
        while (choice >= 6 || choice < 0)
        {
            std::cout << "Try again (range 0-5): ";
            std::cin >> choice;
        }
            
        if (choice == 1)
            std::for_each(vec.begin(), vec.end(), ShowReview);
        if (choice == 2)
        {
            std::sort(vec.end(), vec.begin(), NameInAlphabetical);
            std::for_each(vec.begin(), vec.end(), ShowReview);
        }
 
        std::cout << "Contunie <y/n>: ";
        (std::cin >> ch).get();
    }
 
    return 0;
}
 
Review FillReview()
{
    std::string t;
    int r;
    double p;
 
    std::cout << "Enter book title: ";
    std::getline(std::cin, t);
 
    std::cout << "Enter book rating: ";
    std::cin >> r;
 
    std::cout << "Enter book price: ";
    std::cin >> p;
 
    // Избавиться от остальной части строки ввода
    while (std::cin.get() != '\n')
        continue;
 
    return Review(t, r, p);
}
 
void ShowReview(std::shared_ptr<Review> shp)
{
    std::cout << "Book title: " << shp->title << '\n' <<
        "Book rating: " << shp->rating << '\n' <<
        "Book price: " << shp->price << "\n\n";
}
 
bool NameInAlphabetical(const std::shared_ptr<Review>& shp1, const std::shared_ptr<Review>& shp2)
{
    return (shp1->title < shp2->title ? true : false);
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.07.2022, 19:07
Ответы с готовыми решениями:

Не работает шаблонный функтор :(
#include &lt;bits/stdc++.h&gt; using namespace std; template&lt;typename cType&gt; struct myMax {...

Функтор
Доброго времени суток!:) есть программа, которая демонстрирует передачу объекта функции по ссылке:...

Нужен функтор с ограничением
{-# LANGUAGE FlexibleInstances,DeriveFunctor #-} data A a = A a a deriving Functor data B a b =...

Функтор и перегруженный оператор
захотел понять многопоточность в новом стадарте с++11 - смотрю...

Что такое функтор
Доброе утро, верное ли данное утверждение: Я считаю, что нет. (1) Код ниже - в местах...

3
Just Do It!
3837 / 2283 / 636
Регистрация: 23.09.2014
Сообщений: 7,051
Записей в блоге: 2
25.07.2022, 19:25 2
Лучший ответ Сообщение было отмечено nik_serebryakov как решение

Решение

Цитата Сообщение от nik_serebryakov Посмотреть сообщение
std::sort(vec.end(), vec.begin(), NameInAlphabetical);
C++
1
    std::sort(vec.begin(), vec.end(), NameInAlphabetical);
?
1
10 / 9 / 1
Регистрация: 11.07.2021
Сообщений: 132
25.07.2022, 19:38  [ТС] 3
XLAT, Спасибо
1
4063 / 3317 / 924
Регистрация: 25.03.2012
Сообщений: 12,483
Записей в блоге: 1
27.07.2022, 13:33 4
Цитата Сообщение от nik_serebryakov Посмотреть сообщение
return (shp1->title < shp2->title ? true : false);
а почему не
C++
1
return shp1->title < shp2->title;
0
27.07.2022, 13:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.07.2022, 13:33
Помогаю со студенческими работами здесь

Не понимаю как создать функтор
#include &lt;iostream&gt; #include &lt;vector&gt; using namespace std; int sum(int c, int d, vector&lt;int&gt;...

Функтор списка (swi prolog)
Ввожу цель A= .(a, ). И хотел бы увидеть ответ A= или A=(b, .(a,...

Класс-функтор с использованием foreach и transform
Добрый вечер господа, Не считает правильно сумму. Выдает феерично большое число. Не подскажите в...

описать словами указатель на функцию, функтор
здравствуйте, помогите мне грамотно описать словами указатель на функцию, функтор. мол когда и...

Создать функтор, который сортирует список
В список p записываются объекты класса Person.Нужно создать функтор, который сортирует список (если...

Не могу написать функтор для поиска в векторе
Есть вектор, содержащий указатели на класс, нужно использовать функцию find, которая ищет элемент...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru