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

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

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

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

04.04.2013, 14:48. Просмотров 688. Ответов 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;
}
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, 19:40 #16
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
#include <iostream>
#include <algorithm>
 
class Foo
{
    public:
    int a;
    float b;
};
 
Foo arr[5] = {
    {5, 12.3},
    {6, 13.1},
    {-3, 19.4},
    {16, -4.3},
    {23, 34.9}
};
 
bool comp1(const Foo& left, const Foo& right)
{
    return left.a < right.a;
}
 
void comp2(const Foo& obj)
{
    std::cout << obj.a << "\t" << obj.b << '\n';
}
 
int main()
{
    std::sort(arr, arr + 5, comp1);
    std::for_each(arr, arr + 5, comp2);
}
0
eocron
Кактус
66 / 66 / 6
Регистрация: 23.05.2012
Сообщений: 343
04.04.2013, 19:50 #17
xtorne21st, Это полезная вещь, но человек сейчас, по видимому, учится. Ему не нужно захламлять голову лишним. А так я с вами согласен - безусловно, дополнительные знания открывают новые возможности.
0
танкист34
-62 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 328
04.04.2013, 19:51  [ТС] #18
Цитата Сообщение от eocron Посмотреть сообщение
xtorne21st, Это полезная вещь, но человек сейчас, по видимому, учится. Ему не нужно захламлять голову лишним. А так я с вами согласен - безусловно, дополнительные знания открывают новые возможности.
а можете уточнить что тут дополнительного??
0
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
04.04.2013, 19:58 #19
танкист34, Указатели на функцию которые принимают алгоритмы.
0
танкист34
-62 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 328
04.04.2013, 20:01  [ТС] #20
Цитата Сообщение от xtorne21st Посмотреть сообщение
танкист34, Указатели на функцию которые принимают алгоритмы.
Мне изначально не понятен вот этот наворот:
bool operator < (const pixel& a) const { return ver < a.ver; }
никто так и не ответил что значит const, откуда берётся "a", мне только понятно что bool это тип, слово return, и поле ver.
Так то отсортировать получается, прост охото разобраться с этим делом.
0
eocron
Кактус
66 / 66 / 6
Регистрация: 23.05.2012
Сообщений: 343
04.04.2013, 20:02 #21
Забудьте про предикаты. Вам они в данный момент, чтобы это понять - не нужны.

Вы можете сортировать как вашей душе угодно. Метод sort выполняет сортировку элементов,только если для них определен оператор больше - [ < ]. (Подумайте сами. Вы же должны как-то сказать сортировке, чем один человек меньше второго? Рост, вес, пол или может быть деньги их различают?)

А вот КАК этот оператор "меньше" определен, как раз и задает та самая:

C++
1
2
3
4
bool operator< (const Person& a) const
{
          return points < a.points;
}
или если вам так будет понятнее:
C++
1
2
3
4
5
6
7
8
9
10
11
bool operator< (const Person& a) const
{
          if(points < a.points)
          {
                return true;
          }
          else
          {
                return false;
          }
}
, что есть то же самое, что и первый код. Она возвращает true (первый меньше второго) или false (первый больше или равен второму)

То есть она говорит, что если points (поинты первого People) меньше, чем a.point (поинты второго People) - вернет true, если обратное - false.

Так же вы можете написать там еще кучу всяких признаков по которым вы считаете, что Первый должен быть меньше Второго.
1
танкист34
-62 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 328
04.04.2013, 20:29  [ТС] #22
Цитата Сообщение от eocron Посмотреть сообщение
Забудьте про предикаты. Вам они в данный момент, чтобы это понять - не нужны.

Вы можете сортировать как вашей душе угодно. Метод sort выполняет сортировку элементов,только если для них определен оператор больше - [ < ]. (Подумайте сами. Вы же должны как-то сказать сортировке, чем один человек меньше второго? Рост, вес, пол или может быть деньги их различают?)

А вот КАК этот оператор "меньше" определен, как раз и задает та самая:

C++
1
2
3
4
bool operator< (const Person& a) const
{
          return points < a.points;
}
или если вам так будет понятнее:
C++
1
2
3
4
5
6
7
8
9
10
11
bool operator< (const Person& a) const
{
          if(points < a.points)
          {
                return true;
          }
          else
          {
                return false;
          }
}
, что есть то же самое, что и первый код.

То есть она говорит, что если points (поинты первого People) меньше, чем a.point (поинты второго People) - вернет true, если обратное - false.

Так же вы можете написать там еще кучу всяких признаков по которым вы считаете, что Первый должен быть меньше Второго.
Я что-то не понимаю вы пишите забыдь о предикатах, когда я вам написал этот наворот bool operator < (const pixel& a) const { return ver < a.ver; } и тут же пишите, что именно эта штука даёт возможность сравнить. Тавтология какая-то. И опять таки уходим от моего вопроса, я не могу понять что такое const, a, и operator. И почему нельзя применять в моём случае метод пузырька, а писать вот этот наворот который вообще не поддаётся моему пониманию. Всё равно вам спасибо хоть отвечаете, не судите там строго.

Добавлено через 21 минуту
а как функцию сортировки пузырьком применить
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
//////метод пузырька (функция) в качестве параметров массив интов и размерность массива
void bubbleSort(int array[], int colich){                    
        int temp=0;                              
        for (int i=1;  i < colich  ;  i++){            
                for (int j = 0;  j < colich-i;  j++){     
                        if (array [j]>array [j+1]){     
                                temp=array[j];           
                                array [j]=array [j+1];    
                                array [j+1]=temp;
                        }
                }
        }
}
0
eocron
Кактус
66 / 66 / 6
Регистрация: 23.05.2012
Сообщений: 343
04.04.2013, 23:20 #23
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <vector>
 
using namespace std;
 
template<class T>
void bubbleSort(vector<T> &res)
{                
        T temp;                               
        for(int i=0;  i < res.size();  i++)
        {            
                for(int j = 0;  j < res.size()-i;  j++)
                {     
                        if(res[j+1]<res[j])
                        {     
                                temp=res[j];           
                                res[j]=res[j+1];    
                                res[j+1]=temp;
                        }
                }
        }
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.04.2013, 23:20
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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