Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/65: Рейтинг темы: голосов - 65, средняя оценка - 4.55
2 / 2 / 1
Регистрация: 14.11.2012
Сообщений: 33

Как сортировать вектор объектов по определенному полю?

30.11.2014, 12:20. Показов 14184. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Можно ли сортировать вектор объектов по определенному полю, например по имени студента?
Спасибо за помощь?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.11.2014, 12:20
Ответы с готовыми решениями:

Отсортировать вектор объектов класса по определенному полю
Нужно отсортировать вектор word объектов objectW по полю length. В 42 строке пытаюсь это сделать, но что-то явно не то. Подскажите...

Удаление структуры по определенному полю.
Я сделал удаление элемента после заданного. Например я ввожу значение, если оно совпадает с колличеством, то следующая запись удаляется. ...

Сортировка списка структур по определенному полю
Помогите пожалуйста вписать в эту программу сортировку по цене или количеству ато не знаю как ее сюда приделать #include...

8
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
30.11.2014, 13:50
http://www.cplusplus.com/reference/algorithm/sort/
0
2 / 2 / 1
Регистрация: 14.11.2012
Сообщений: 33
02.12.2014, 23:35  [ТС]
Посмотрел ,но не понял((

Вот у меня есть хейдер customers_manip.h
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#pragma once
#include <vector>
#include "customer.h"
#include <list>
class customer_manip
{
private:
    vector<customer> mascustumer;
    
public:
    customer_manip(void);
    void Add_customer(string name,string surname,int n_passport,string address, int tel_number,int bank_number,string tipe_apt,int price);
    void Del_custumer(int n_passport);
    void SortCustomerByName();
    void ShowAll();
    //bool funk(customer cs1,customer cs2);
    ~customer_manip(void);
};
вот хейдер customer.h
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
#pragma once
#include <string>
#include "real_estate.h"
#include <vector>
 
using namespace std;
class customer
{
private:
    string Name;
    string Surname;
    int N_passport;
    string Address;
    int Tel_number;
    int Bank_number;
    string Tipe_apt;
    int Price;
    real_estate Real_est[5];
    
public:
    customer(void);
    //SetBlock
    void SetName(string);
    void SetSuname(string);
    void SetN_passport(int);
    void SetAddress(string);
    void SetTel_number(int);
    void SetBank_number(int);
    void SetTipe_apt(string);
    void SetPrice(int);
    //void SetAll();
    //GetBlock
    string GetName();
    string GetSuname();
    int GetN_passport();
    string GetAddress();
    int GetTel_number();
    int GetBank_number();
    string GetTipe_apt();
    int GetPrice();
    
    
    //Other block...
    
    ~customer(void);
};
в манипуляторе должна быть функция сортировки вектора по Именам клиентов , помогите реализовать((
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
02.12.2014, 23:39
Компилятор не умеет сравнивать пользовательские типы, определите компаратор
C++
1
2
3
4
bool operator<(const customer &lhs, const customer &rhs)
{
    return lhs.поле < rhs.поле;
}
Далее вызывайте уже алгоритм std::sort, либо пишите свою сортировку.
C++
1
std::sort(mascustumer.begin(), mascustumer.end());
2
2 / 2 / 1
Регистрация: 14.11.2012
Сообщений: 33
02.12.2014, 23:49  [ТС]
вот делал так но , не могу понять перегрузка оператора < должна быть описана как френдли. и реализована вне класса манипулятора?
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
03.12.2014, 11:11
Объявите её вне класса
1
 Аватар для SunDrop
390 / 229 / 11
Регистрация: 09.12.2009
Сообщений: 668
03.12.2014, 11:39
Лучший ответ Сообщение было отмечено Deckvv как решение

Решение

Возможные варианты решения:
1) (уже назывался) переопределить у класса customer оператор <
2) Использовать лямду (если 11-ый стандарт поддерживается)
C++
1
2
3
4
5
sort(mascustumer.begin(), mascustumer.end(), 
    [](const customer & a, const customer & b) -> bool
{ 
    return a.GetName() > b.GetName(); 
});
3) Просто использовать внешнюю функцию
C++
1
2
bool myfunction (const customer & a, const customer & b) { return a.GetName() > b.GetName(); }
sort(mascustumer.begin(), mascustumer.end(), myfunction);
2
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
03.12.2014, 16:26
Это уже кто как любит предикат объявлять.
Функторы, предикаты, функциональные адаптеры, лямбда-функции
1
2 / 2 / 1
Регистрация: 14.11.2012
Сообщений: 33
03.12.2014, 16:38  [ТС]
Огромное Спасибо Всем, получилось , воспользовался лямбда выражением !!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.12.2014, 16:38
Помогаю со студенческими работами здесь

Сортировка массива структур по определенному полю
Всем привет...со структурами проблемка возникла...затупил)Задание состоит в следующем: Ввести структуру Студент с полями...

Qsort() Как отсортировать массив объектов по полю объекта
Здравствуйте! Никак не могу сладить с функцией qsort(). У меня есть класс, и в нем нужно сделать сортировку по ОДНОМУ элементу...

Сортировка элементов массива классов по определенному полю
есть класс у которого есть несколько полей ,нужно сортировать массив класса за полем exp class Worker { private: string...

Как в SQL сервер 2005 в таблице определенному полю проставить значение по умолчанию!
Доброе время суток! Не получается в таблице определенному полю присвоить значение по умолчанию, чтобы когда заходишь в таблицу конкретно...

Как присвоить определенному полю БД значение переменной, вычесленной в ходе выполнения программы
У меня проблема с Fox Pro, подскажите пожалуйста как присвоить определенному полю базы данных значение переменной вычесленной в ходе...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru