Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
34 / 34 / 21
Регистрация: 01.11.2013
Сообщений: 319

Сортировка вектора записей по двум полям одновременно

06.12.2014, 20:17. Показов 1551. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, не получается создать две разных функции перегрузки оператора <:одну для сортировки первого поля класса,вторую для сортировки второго поля класса). Подскажите пожалуйста как это можно реализовать, чтобы можно было сортировать сразу по двум полям. Буду очень благодарен.
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
// pp.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
#include <windows.h>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;
 
class Car{
    string brand;
    int seats;
public:
    Car(){
        brand="";
        seats=0;
    }
    Car(string brand,int seats){
        this->brand=brand;
        this->seats=seats;
    }
    void Print(){
        cout<<brand<<seats;
    }
    //bool operator <(Car &p){  //По алфавиту
    //  return brand<p.brand;
    //}
    bool operator <(Car &p1){  //По числам
        return seats<p1.seats;
    }
    int GetSeats(){
        return seats;
    }
    string GetBrand(){
        return brand;
    }
};
 
bool Descending(Car &a,Car&b){
    return a.GetSeats()>b.GetSeats();
}
 
/*bool Descending1(Car &a,Car&b){
    if (a.GetBrand().compare(b.GetBrand())) return true;
}*/
 
int _tmain(int argc, _TCHAR* argv[])
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    vector <Car> c1(3);
    c1.at(0)=Car("Mersedes",7);
    c1.at(1)=Car("Ford",19);
    c1.at(2)=Car("Opel",4);
    c1.push_back(Car("Lexus",5));
    vector<Car>::iterator it=c1.begin();
    while(it!=c1.end())
        cout<<it++->GetSeats()<<" ";
    cout<<endl;
    it=c1.begin();
    //сортировка по алфавиту
    sort(c1.begin(),c1.end());
    while(it!=c1.end())
        cout<<it++->GetBrand()<<" ";
    //сортировка по числам
    it=c1.begin();
    sort(c1.begin(),c1.end());
    while(it!=c1.end())
        cout<<it++->GetSeats()<<" ";
    
    system("pause");
    return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.12.2014, 20:17
Ответы с готовыми решениями:

Сортировка вектора по двум полям
Вектор состоит из структуры с двумя полями: день недели и время. Нужно отсортировать так, чтобы сначала в векторе хранились структуры, у...

Сортировка по двум полям
Здравствуйте, уважаемые! Есть такой map частотный словарь: 155 hello 74 welcome 50 car 18 red 4 digital ...

Sort vector, сортировка по двум полям структуры
Поскажите как отсортировать если: struct DATA{ string fir; string sec; double sm; }; vector &lt;DATA&gt; vec; ...

4
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
06.12.2014, 20:47
У std::sort есть 3й необязательный параметр - функтор, с помощью которого сортировать
Например, вы можете создать static функцию, которая принимает 2 объекта и возвращает bool
C++
1
2
3
4
5
6
7
class some {
public:
    static bool sort_func(some const&,some const&);
};
static bool some::sort_func(some const&,some const&) {
//...
}
и далее в коде
C++
1
2
3
std::vector<some> a;
//...
std::sort(a.begin(), a.end(), some::sort_func);
1
34 / 34 / 21
Регистрация: 01.11.2013
Сообщений: 319
07.12.2014, 12:37  [ТС]
А как быть с перегрузкой оператора < ?

Добавлено через 17 минут
Я так понял, что можно вообще без перегрузки оператора < обойтись?
0
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
07.12.2014, 12:54
Цитата Сообщение от kozak95 Посмотреть сообщение
что можно вообще без перегрузки оператора < обойтись?
Да, можно
0
34 / 34 / 21
Регистрация: 01.11.2013
Сообщений: 319
07.12.2014, 12:55  [ТС]
Все понял. Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.12.2014, 12:55
Помогаю со студенческими работами здесь

Сортировка файла записей по двум критериям
В общем, есть файл из записей, 4 поля, мне надо его отсортировать пирамидой, с помощью индексированного массива по 2м критериям, то есть...

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

Живой поиск по двум полям одновременно с автоматическим выводом найденных значений
Добрый день Нужна Ваша помощь в изменении кода своих сил не хватает что бы додумать все до логического завершения есть код который при...

Поиск записей по двум полям формы
Добрый вечер, Хочу организовать поиск по двум полям формы, получилось так, что отбирает по первому либо второму полю и только записи в...

Удаление дубликатов записей по двум полям
Я нашёл в интернете три способа как можно удалить дубликаты записей по двум полям (значениям). Использовать временную таблицу из которой...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Реалии
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. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru