Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
танкист34
-62 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 328
#1

Массив структур - C++

04.04.2013, 14:48. Просмотров 684. Ответов 22
Метки нет (Все метки)

Как отсортировать массив структур или вектор (значения не имеет) по полю типа float? Спасибо
Вот нашёл пример на форуме, но не могу понять выделенные строки и по какому полю идёт сортировка(думаю по полю points)
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
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <iterator>
#include <vector>
#include <sstream>
#include <algorithm>
 
using namespace std;
 
struct Person{
        std::string surname,name;
        unsigned school,points;
        bool operator< (const Person& a) const{//
          return points < a.points;//
        }//
};
 
int main(){
        std::vector<Person> arr;
        int N;
        std::cin >> N;
        arr.resize(N);
        for (int i = 0; i < N; i++)
        std::cin >> arr[i].surname >> arr[i].name >> arr[i].school >> arr[i].points;
        std::sort(arr.begin(),arr.end()); 
        return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.04.2013, 14:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Массив структур (C++):

Блочная сортировка структур (Отсортировать массив структур по фамилии) - C++
Подскажите алгоритм блочной сортировки структур на языке С++. Мне нужно отсортировать массив структур по фамилии.

Массив структур, сохранение начала каждой из структур - C++
Я создал такую структуру class Lancuch { public: char cos; Lancuch * nastepny; }; Lancuch * poczatek=NULL; cin &gt;&gt;...

Как объявить динамический массив структур, и как выглядит обращение к полям структур по указателю? - C++
Ребята подскажите как объявить динамический массив структур, и как выглядит обращение к полям структур по указателю.

Массив структур в массиве структур - C++
Всем добрый день. Делаю менюшку для управления и терзаю Arduino IDE слегка подвис со следующей задачей. Я хочу определить две...

Ввести массив структур; рассортировать массив в алфавитном порядке - C++
Пришел из армии восстановился в универе и тут сразу курсавай. Помогите Исходные данные(описание структуры): Информация об...

Как передать массив структур в функцию в качестве параметра, чтобы изменения в функции меняли исходный массив? - C++
Допустим есть структура struct Base { int a; int b; int c; }; В основном методе main() объявим массив...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
04.04.2013, 15:12 #2
Нужно написать предикат для std::sort. В этом коде вообще не ясно по чём оно сортирует.
Afflicted
Обитатель форума
199 / 182 / 8
Регистрация: 28.10.2012
Сообщений: 543
04.04.2013, 15:39 #3
Цитата Сообщение от танкист34 Посмотреть сообщение
C++
1
2
3
4
bool operator < (const Person& a) const
{ 
    return points < a.points;
}
это перегрузка оператора "меньше"

Хотя не понимаю для чего он тут нужен, если не используется.
танкист34
-62 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 328
04.04.2013, 16:27  [ТС] #4
Цитата Сообщение от xtorne21st Посмотреть сообщение
Нужно написать предикат для std::sort. В этом коде вообще не ясно по чём оно сортирует.
а можете сказать, где прочесть про предикаты для сортировки с примерами?? и вообще можно ли отсортировать пузырьковым методом?
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
04.04.2013, 16:30 #5
А какого предикаты делают на плюсах? Это не пролог.
танкист34
-62 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 328
04.04.2013, 16:31  [ТС] #6
Цитата Сообщение от taras atavin Посмотреть сообщение
А какого предикаты делают на плюсах? Это не пролог.
блин я ничего не понимаю, мне нужна сортировка, а про предикаты я даже не слышал
eocron
Кактус
66 / 66 / 6
Регистрация: 23.05.2012
Сообщений: 343
04.04.2013, 16:32 #7
Сортирует эту штука по points. Именно для этого и нужен перегруженный оператор. А иначе без него, как бы вы отличили двух человек? Как сказать машине, что один из них больше другого, по какому признаку? Для этого и нужна перегрузка оператаро <, так как именно этот оператор используется в функции sort, чтобы различать этих People по старшинству.

Забудьте про предикаты. Это не тот язык, где вам вообще стоит о них думать.
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
04.04.2013, 16:37 #8
http://www.cplusplus.com/forum/beginner/42159/

Цитата Сообщение от танкист34 Посмотреть сообщение
и вообще можно ли отсортировать пузырьковым методом?
Конечно.
танкист34
-62 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 328
04.04.2013, 16:37  [ТС] #9
Цитата Сообщение от eocron Посмотреть сообщение
Сортирует эту штука по points. Именно для этого и нужен перегруженный оператор. А иначе без него, как бы вы отличили двух человек? Как сказать машине, что один из них больше другого, по какому признаку? Для этого и нужна перегрузка оператаро <, так как именно этот оператор используется в функции sort, чтобы различать этих People по старшинству.

Забудьте про предикаты. Это не тот язык, где вам вообще стоит о них думать.
а почему нигде больше эта конструкция не фигурирует?? дальше по коду передаётся же функции sort только итератор на начало и конец?
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
04.04.2013, 16:42 #10
Цитата Сообщение от eocron Посмотреть сообщение
Сортирует эту штука по points.
Пронёсся быстрым взглядом, сразу и не заметил.
Цитата Сообщение от eocron Посмотреть сообщение
Забудьте про предикаты.
А как по мне, очень полезная и удобная вещь, которая должна быть в арсенале обязательно.

Добавлено через 1 минуту
Цитата Сообщение от танкист34 Посмотреть сообщение
а почему нигде больше эта конструкция не фигурирует?? дальше по коду передаётся же функции sort только итератор на начало и конец?
std::sort так реализован, что он сравнивает два объекта, а перегруженный оператор способствует этому.
танкист34
-62 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 328
04.04.2013, 16:45  [ТС] #11
Цитата Сообщение от xtorne21st Посмотреть сообщение
Пронёсся быстрым взглядом, сразу и не заметил.

А как по мне, очень полезная и удобная вещь, которая должна быть в арсенале обязательно.

Добавлено через 1 минуту

std::sort так реализован, что он сравнивает два объекта, а перегруженный оператор способствует этому.
А почему это всё дело объявлено в структуре?? ведь структура это тип данных, а перегруженный оператор там откуда? И если я заменю тип unsigned на float поля points он будет верно сортировать?
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
04.04.2013, 16:45 #12
т.е. теоретически получается, что сам предикат/компаранд находится в классе и реализован посредством перегруженного оператора <
танкист34
-62 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 328
04.04.2013, 16:48  [ТС] #13
Цитата Сообщение от xtorne21st Посмотреть сообщение
т.е. теоретически получается, что сам предикат/компаранд находится в классе и реализован посредством перегруженного оператора <
а проще чтоб было понятно начинающему без всяких предикатов там и наворотов в структуре можно реализовать? Я то не мастер, перегруженными операторами фактически не пользовался, только когда cin и cout применял.
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
04.04.2013, 16:49 #14
Цитата Сообщение от танкист34 Посмотреть сообщение
А почему это всё дело объявлено в структуре?? ведь структура это тип данных, а перегруженный оператор там откуда?
struct, class, union - это всё пользовательские типы данных. Только class по умолчанию - закрытый тип, А остальные два - открытые.
Цитата Сообщение от танкист34 Посмотреть сообщение
И если я заменю тип unsigned на float поля points он будет верно сортировать?
А почему нет?

Добавлено через 1 минуту
Цитата Сообщение от танкист34 Посмотреть сообщение
а проще чтоб было понятно начинающему без всяких предикатов там и наворотов в структуре можно реализовать?
Почитайте о предикатах и вы поймёте, что там нет ничего сложного.
танкист34
-62 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 328
04.04.2013, 18:13  [ТС] #15
Цитата Сообщение от xtorne21st Посмотреть сообщение
struct, class, union - это всё пользовательские типы данных. Только class по умолчанию - закрытый тип, А остальные два - открытые.

А почему нет?

Добавлено через 1 минуту

Почитайте о предикатах и вы поймёте, что там нет ничего сложного.
значит если я прочту о предикатах то пойму ту конструкцию в структуре?? или всё таки нет?

Добавлено через 1 час 22 минуты
народ, ну кто нить скажет как отсортировать структуру по одному из полей?? помогите плиз
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.04.2013, 18:13
Привет! Вот еще темы с ответами:

Массив структур - C++
Помогите пожалуйста: Описать структуру с именем NOTE, содержащую следующие поля: фамилия, имя, номер телефона, дата рождения (массив из...

Массив структур - C++
Эксперементирую тут с файлами. Что-то полная ерунда получается. ВОт я объявил массив структур, а при заполнении ерунда какая-то...

Массив структур - C++
Доброй ночи! Есть задание c массивом структур. Надо было нaпиcaть пpoграммy ввода и удаления инфopмации o coтрyдникe c указанным вoзpастoм....

Массив структур - C++
Нужно создать массив структур и разработать программное приложение, которое включает его обработку с выводом результата на экран...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
04.04.2013, 18:13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru