Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 04.08.2021
Сообщений: 257

std::sort

12.05.2024, 01:03. Показов 508. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Помогите, пожалуйста разобраться в ошибке:
Задача заключается в том, чтобы сортировать прямоугольники относительно отдаления от центра координатной плоскости:
shape.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <fstream>
enum E_COLOR { RED, GREEN, BLUE, WHITE };
 
class Shape {
    E_COLOR color;
public:
    Shape(E_COLOR color = RED);
    virtual double Area() const = 0;
    virtual Shape* Copy() const = 0;
    virtual bool operator==(const Shape&) const = 0;
    virtual Shape& operator=(const Shape&);
    int getColor() const;
    friend std::ostream& operator<<(std::ostream& of, const Shape&);
    friend std::ofstream& operator<<(std::ofstream& of, const Shape&);
};
shape.cpp
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
#include "Shape.h"
 
Shape::Shape(E_COLOR color):color(color) {
}
 
bool Shape::operator==(const Shape& other) const  {
    return this->color == other.color ? true : false;
}
 
int Shape::getColor() const {
    return this->color;
}
 
Shape& Shape::operator=(const Shape& other){
    color = other.color;
    return *this;
}
 
std::ostream& operator<<(std::ostream& of, const Shape& other) {
    const char* ar[] = { "RED", "GREEN", "BLUE", "WHITE" };
    std::cout << "Color - " << ar[other.color] << std::endl;
    return of;
}
 
std::ofstream& operator<<(std::ofstream& of, const Shape& shape) {
    of << static_cast<int>(shape.color) << std::endl;
    return of;
}
Rect.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include "Shape.h"
#include "fstream"
 
class Rect:public Shape {
    int xl;
    int yl;
    int xr;
    int yr;
public:
    Shape* Copy() const;
    Rect();
    Rect(int, int, int, int,  E_COLOR);
    double Area()const;
    virtual bool operator==(const Shape&) const;
    virtual Rect& operator=(const Shape&);
    friend std::ostream& operator<<(std::ostream& of, const Rect& other);
    friend std::ofstream& operator<<(std::ofstream& of, const Rect&);
    friend class Distance;
};
rect.cpp
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
#include "Rect.h"
 
Rect::Rect() {
    xl = 0;
    yl = 0;
    xr = 0;
    yl= 0;
}
 
Rect::Rect(int x, int y, int x1, int y1, E_COLOR col):Shape(col){
    xl = x;
    yl = y;
    xr = x1;
    yr = y1;
}
 
double Rect::Area() const {
    return (xr - xl) * (yr - yl);
}
 
Shape* Rect::Copy() const {
    return new Rect(*this);
}
 
Rect& Rect::operator=(const Shape& other) {
    const Rect& c = static_cast<const Rect&>(other);
    *this = c;
    return *this;
}
 
bool Rect::operator==(const Shape& other) const {
    if (typeid(other) == typeid(Rect)) {
        const Rect& c = static_cast<const Rect&>(other);
        return this->xr == c.xr && this->xl == c.xl && this->yl == c.yl && this->yr == c.yr  && (this->Shape::operator==(other));
    }
    else return false;
}
 
std::ostream& operator<<(std::ostream& of, const Rect& other) {
    std::cout << "Its RECT\nxl=" << other.xl << " yl=" << other.yl << " xr=" << other.xr << " yr=" << other.yr << std::endl;
    return of;
}
 
std::ofstream& operator<<(std::ofstream& of, const Rect& rect) {
    of << rect.xl << std::endl;
    of << rect.yl << std::endl;
    of << rect.xr << std::endl;
    of << rect.yr << std::endl;
    return of;
}
Func.h
C++
1
2
3
4
5
6
7
8
9
10
11
#include <cmath>
class Distance {
    int x;
    int y;
public:
    Distance(int first, int second) :x(first), y(second) {};
    bool operator()(const Rect& rect1, const Rect& rect2)const {
        return (pow((((rect1.xr - rect1.xl)/2) - x), 2) + pow((((rect1.yr - rect1.yl)/2)-y), 2)) > 
            (pow((((rect2.xr - rect2.xl) / 2) - x), 2) + pow((((rect2.yr - rect2.yl) / 2) - y), 2)); //ТЕОРЕМА ПИФАГОРА
    }
};
Main
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <list>
#include <algorithm>
#include "Funcs.h"
#include "Rect.h"
int main(){
std::list<Rect> list_rect;
    list_rect.push_back(Rect(2, 3, 5, 6, GREEN));
    list_rect.push_back(Rect(23, 3, 11, 8, GREEN));
    list_rect.push_back(Rect(13, 27, 8, 9, GREEN));
    list_rect.push_back(Rect(1, 1, 8, 10, GREEN));
    std::sort(list_rect.begin(), list_rect.end(), Distance(0,0));
}
Ошибки при компиляции:
Code
1
2
3
4
5
6
7
8
9
10
Funcs.h: error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
Funcs.h: error C2143: синтаксическая ошибка: отсутствие "," перед "&"
Funcs.h: error C2065: rect1: необъявленный идентификатор
Funcs.h: error C2065: rect1: необъявленный идентификатор
Funcs.h: error C2065: rect1: необъявленный идентификатор
Funcs.h: error C2065: rect1: необъявленный идентификатор
Funcs.h: error C2065: rect2: необъявленный идентификатор
Funcs.h: error C2065: rect2: необъявленный идентификатор
Funcs.h: error C2065: rect2: необъявленный идентификатор
Funcs.h: error C2065: rect2: необъявленный идентификатор
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.05.2024, 01:03
Ответы с готовыми решениями:

Отличие std::sort От std::qsort
Пишу доклад по программированию, собственно выбрал тему сортировок. вот сейчас хочу расписать отлчиие + и - двух сортировок. но инфу...

std::sort + std::lower_bound
тема такая: есть класс person: class Person{ private: string name_; string adress_; long phone_; есть вектор объектов...

std::sort
1. в std::sort реализован introsort? 2. почему std::sort работает во много раз быстрей в сборке Release чем в Debug. С чем это связано? ...

7
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
12.05.2024, 01:26
Цитата Сообщение от agent070 Посмотреть сообщение
#include "Funcs.h"
Так и где он ?

Так же для std::sort необходим итератор произвольного доступа.
У std::list таких нет.
0
0 / 0 / 0
Регистрация: 04.08.2021
Сообщений: 257
12.05.2024, 01:32  [ТС]
В Rect.h Вы имеете ввиду нужно подключить файл?
А про итератор я что-то не подумал, действительно лучше дек или вектор сделать
Интересно, а почему тогда синтаксически корректно передавать в параметры сорт итераторы листа?
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
12.05.2024, 01:43
Цитата Сообщение от agent070 Посмотреть сообщение
В Rect.h Вы имеете ввиду нужно подключить файл?
Нет.
У вас в Main подключается хидер "Funcs.h", но вы привели "Func.h".
0
0 / 0 / 0
Регистрация: 04.08.2021
Сообщений: 257
12.05.2024, 01:45  [ТС]
Случайно букву не дописал, там Funcs)
Имею ввиду что в коде все правильно написано
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
12.05.2024, 01:57
Цитата Сообщение от agent070 Посмотреть сообщение
А про итератор я что-то не подумал, действительно лучше дек или вектор сделать
Если нужен std::list - значит нужен std::list, у него есть собственный метод сортировки.

Ещё, нужно заботится о защите от повторных включений заголовочных файлов.
https://onlinegdb.com/XQGR0SJmp

Добавлено через 3 минуты
Цитата Сообщение от agent070 Посмотреть сообщение
Интересно, а почему тогда синтаксически корректно передавать в параметры сорт итераторы листа?
Туда можно хоть Деда Мороза передать, он либо будет соответствовать семантике итератора с произвольным доступом или будет ошибка компиляции.
Потому что существует контракт, что должно передаваться в эту функцию для её корректной работы.

Добавлено через 2 минуты
Цитата Сообщение от agent070 Посмотреть сообщение
Ошибки при компиляции:
Funcs.h: error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
Funcs.h: error C2143: синтаксическая ошибка: отсутствие "," перед "&"
Funcs.h: error C2065: rect1: необъявленный идентификатор
Funcs.h: error C2065: rect1: необъявленный идентификатор
Funcs.h: error C2065: rect1: необъявленный идентификатор
Funcs.h: error C2065: rect1: необъявленный идентификатор
Funcs.h: error C2065: rect2: необъявленный идентификатор
Funcs.h: error C2065: rect2: необъявленный идентификатор
Funcs.h: error C2065: rect2: необъявленный идентификатор
Funcs.h: error C2065: rect2: необъявленный идентификатор
Нужен Rect.h в Funcs.h, но без защиты от повторного включения, у вас будут другие ошибки, а до сорта вы еще не дошли или не показали.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12938 / 6805 / 1821
Регистрация: 18.10.2014
Сообщений: 17,228
12.05.2024, 02:06
Цитата Сообщение от agent070 Посмотреть сообщение
bool operator()(const Rect& rect1, const Rect& rect2)const {
Ну так а что такое Rect в Func.h? Этот тип там не известен.

Цитата Сообщение от agent070 Посмотреть сообщение
#include "fstream"
Почему здесь внезапно использованы кавычки?

Цитата Сообщение от agent070 Посмотреть сообщение
Интересно, а почему тогда синтаксически корректно передавать в параметры сорт итераторы листа?
Туда вообще можно все что угодно передавать.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
12.05.2024, 02:08
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Ну так а что такое Rect в Func.h?
Наверное, классическая попытка вручную расставлять порядок включения хидеров :
(но что то пошло не так, как всегда)
C++
1
2
3
4
5
#include <iostream>
#include <list>
#include <algorithm>
#include "Rect.h"
#include "Funcs.h"
И всё уже "типо" нормально...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.05.2024, 02:08
Помогаю со студенческими работами здесь

std::sort()
Доброго времени суток! Есть некая структура: struct member { int latency; std::vector&lt;int&gt;child; };

std::sort
Достоинства и недостатки делаю таблицу, достоинств и недостатков std::Sort. собственно, не нащёл нечего про это в википедии

std::sort и компаратор
Доброго времени суток. Есть два массива: Struct Model { float x; float y; }; std::vector &lt;Model&gt; models;

std::sort и nan
Согласно стандарту nan не сравнимо ни с чем. Как лучше поступить при сортировке массива, где могут быть nan? Тупо скидывать nan в один...

algorithm std::sort
Почему так делать нельзя? #include &lt;algorithm&gt; using namespace std; class T { private: int arr;


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru