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

Сортировка по одному из полей std::vector - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Выделить подстроку, которая соответствует записи вещественного числа с плавающей точкой http://www.cyberforum.ru/cpp-beginners/thread957166.html
Дана строка символов, состоящая из букв, цифр, запятых, точек, знаков «+» и «–». Выделить подстроку, которая соответствует записи вещественного числа с плавающей точкой.
C++ создать таблицу и ввести в нее данные по номеру Хочу сделать таблицу-простую-номера столбцов 1 2 3 4 5 6 7 8 9 10 1a 1b 1c 1d 1e 1f-шестнадцатиричная система. Строки-обычные 12345678910-до 10000 например.Потом надо ввести в ячейку например номер 1c20 символ f. И еще как брать символ из файла по номеру,и количество символов с определенного слова или символа. http://www.cyberforum.ru/cpp-beginners/thread957165.html
C++ Указатель на статический трехмерный массив
Как сделать указатель на статический трехмерный массив? Почему компилятор сам не определяет размер массива,а выбивает ошибку int mass= { { { {1}, {1} }, { {1}, {1} } }, { { {1}, {1} }, { {1}, {1} } } };
Спецификатор typedef C++
Не могу понять как работает спецификатор typedef... Прочитал про него достаточно инфы и он везде сравнивается с директивой #define с той лишь разницей, что он запускается на этапе компиляции а не препроцессора и более совершенный в том смысле, что он является именно новым типом данных, а не просто подстановкой - это все понятно, но следующая конструкция не может найти в моей голове логического...
C++ Написать программу, которая находит площадь квадрата http://www.cyberforum.ru/cpp-beginners/thread957114.html
Помогите написать программу на С++ которая находит площадь квадрата. Помогите пожалуйста.
 

Показать сообщение отдельно
Gorodeckiy
0 / 0 / 0
Регистрация: 18.09.2013
Сообщений: 8
18.09.2013, 16:52     Сортировка по одному из полей std::vector
Подскажите пожалуйста! Задача:

Имеется класс Person с полями: Family, Name, BirthDay, Sex, ExperienceTime (Фамилия, имя, дата рождения, пол, опыт работы).
Нужно реализовать контейнер (для сущностей Person) с методом сортировки: sortX(Order order[]).
Вспомогательная структура Order: имя поля сортировки, порядок сортировки (bool)
Дополнительное указание: использовать стандартный метод (или функцию) sort, использовать аргументы типа функция (где это уместно).

Вот что я уже навоял:
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#include <conio.h> 
#include <iostream>
#include <vector>
#include <algorithm>
// определение ptr_fun
#include <functional>
using namespace std;
 
class Person
{ 
public: 
    char Family; 
    char Name; 
    char BirthDay;
    char Sex;
    int ExperienceTime; 
 
    Person(char f, char n, char b, char s, int e)
    {
        Family = f;
        Name = n;
        BirthDay = b;
        Sex = s;
        ExperienceTime = e;
    };
 
    void show(void)
    { 
        cout << "||    " << Family << "   ||  " << Name << "   ||    " << BirthDay << "     ||  " << Sex << "  ||       " << ExperienceTime << "        ||\n";
    }
};
 
struct Order  
{
public:
    char SortName[15];
    bool SortOrder;
};
 
vector <Person> sortX(Order order, vector <Person> a)
{
    
        //////// Добавить сортировку!!!!
 
        if (order.SortOrder == true) 
    {
        cout << "\nField for sorting: <" << order.SortName <<">\nSorting method: <Direct>\n";       
    }
    else
    {
        cout << "\nField for sorting: <" << order.SortName <<">\nSorting method: <Reverse>\n";
    }
    return a;
}
 
void SelectName()
{
    cout << "\nSelect the field to be sorted:\n";
    cout << " 1 - Family\n";    
    cout << " 2 - Name\n";
    cout << " 3 - BirthDay\n";
    cout << " 4 - Sex\n";
    cout << " 5 - ExperienceTime\n";
    cout << " 0 - Exit\n\n";
}
 
void SelectOrder()
{
    cout << "\nselect the sort order:\n";
    cout << " 1 - Direct\n";    
    cout << " 2 - Reverse\n";
    cout << " 0 - Exit\n\n";
}
 
void showX(vector <Person> Cont)
{
    cout << "\n|| Family || Name || BirthDay || Sex || ExperienceTime ||\n";
    cout << "---------------------------------------------------------\n";
 
    for (int i = 0; i < (int)Cont.size(); ++i) 
        Cont[i].show();
    cout << "---------------------------------------------------------\n\n";
}
 
int main ()
{
    char number1;
    char number2;
    bool i = false;
    bool j = false;
    bool k = false;
    vector <Person> Container;
    Order ord;
 
    Container.push_back(Person('a','b','c','m',1));
    Container.push_back(Person('b','c','a','g',2));
    Container.push_back(Person('c','a','b','m',3));
 
    do 
    {
        showX(Container);
 
        do // Выбор поля сортировки
        {
            SelectName();
            cin >> number1;
            if (number1 != '0' && number1 != '1' && number1 != '2' && number1 != '3' && number1 != '4' && number1 != '5') 
            { cout << "\nError!\n";  i = false; }           
            else 
            {
                if (number1 == '0') { exit(1); }
                if (number1 == '1') { strcpy(ord.SortName, "Family"); i = true; }
                if (number1 == '2') { strcpy(ord.SortName, "Name"); i = true; }
                if (number1 == '3') { strcpy(ord.SortName, "BirthDay"); i = true; }
                if (number1 == '4') { strcpy(ord.SortName, "Sex"); i = true; }
                if (number1 == '5') { strcpy(ord.SortName, "ExperienceTime"); i = true; }
            } 
        } while (i != true);   
 
        do // Выбор порядка сортировки
        {
            SelectOrder();
            cin >> number2;
            if (number2 != '0' && number2 != '1' && number2 != '2') 
            { cout << "\nError!\n"; j = false; }            
            else 
            {
                if (number2 == '0') { exit(1); }
                if (number2 == '1') { ord.SortOrder = true; j = true; }
                if (number2 == '2') { ord.SortOrder = false; j = true; }            
            }
        } while (j != true);
 
        Container = sortX (ord,Container);
 
    } while (k != true);
 
};
Проблема в самой сортировке. Нигде не могу найти информации о том как сортировать методом sort по конкретному полю вектора Container.

Я представляю это примерно так:
C++
1
sort(Container.Name.begin(),Container.Name.end());
Но такого компилятор не хочет делать
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 11:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru