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

Stl отсортировать структуру - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Составить код функции вычесления среднего значения для нечетных элементов массива А http://www.cyberforum.ru/cpp-beginners/thread1109731.html
Помогите! Составить код функции вычесления среднего значения для нечетных элементов массива А С меня плюшки))
C++ Найти функцию нахождения наименьших из 3-х чисел Помогите набрать программу! Найти функцию нахождения наименьших из 3-х чисел. Добавлено через 7 минут Помогите написать функцию нахождения наименьших из 3-х чисел. http://www.cyberforum.ru/cpp-beginners/thread1109717.html
C++ Глючит деструктор динамическогом массива
Деструктор: template <typename TBase> TArray <TBase>:: ~TArray ( ) { TBase *p; size_t Count; if (Data!=NULL) { for (p=Data+Count-1; p>=Data; --p) { p->~TBase();
C++ Двунаправленный линейный список
Всем доброго утра:) Ребят,может кто помочь,дали код сказали разобраться со списком...но я путем не понимаю что в нем происходит:(Может кто прокомментировать,пожалуйста!:( void container::In(ifstream &ifst) { shape *New; node *q, *t; t = new node; first = t; New = shape::In(ifst); t->elem = New;
C++ Хорошо ли использовать библиотеку fstream? http://www.cyberforum.ru/cpp-beginners/thread1109686.html
Хорошо ли использовать библиотеку fstream?
C++ Как добавить в код библиотеку <time.h> Привет всем! есть код для задания в справочной автовокзала хранится расписание движения автобусов. Для каждого рейса указаны его номер, тип автобуса, пункт назначения, время отбытия и прибытия. Вывести информацию об рейсах которыми можно воспользоваться для прибытия в пункт назначения раньше заданного времени.Пункт назначения и время вводятся с клавиатуры. как добавить библиотеку <time.h> ... подробнее

Показать сообщение отдельно
dzrkot
zzzZZZ...
518 / 348 / 53
Регистрация: 11.09.2013
Сообщений: 1,995
03.03.2014, 12:28  [ТС]     Stl отсортировать структуру
Цитата Сообщение от THE--MASTER Посмотреть сообщение
мне лень читать две страницы троллинга, напиши в двух словах, что тебе надо сделать - накидаю код.
прочитать из бинарника обратно в структуры NOTEBOOK к примеру в vector<NOTEBOOK> b

Добавлено через 9 минут
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
#include <iostream>
#include <vector>
#include <fstream>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;
 
struct NOTEBOOK{
    struct disp_res{
    int x;              // разрешение экрана
    int y;              //
    };
disp_res disp;
int f;          // частота
float d;        // диагональ
int price;      // цена
char model[21]; // название
};
 
// функция которой мы считываем файл в массив структур NOTE
void readNote(vector<NOTEBOOK> &a, ifstream& in)
{
string str;                 // буфер для хранения считываемой информации
NOTEBOOK n;                 // структура, в которую мы считываем данные из потока in
 
    while (!in.eof())
    {
    in>>str;                        // считываем до первого пробела в str
    n.disp.x=atoi(str.c_str());     // преобразуем тип string в тип int с помощью функции atoi и записываем в n.disp.x
 
    in>>str;
    n.disp.y=atoi(str.c_str());     // аналогично
 
    in>>str;
    n.f=atoi(str.c_str());          // всё тоже самое
 
    in>>str;
    n.d=float(atof(str.c_str()));   // преобразуем функцией atof стринг в double, а затем в float и записываем в
 
    in>>str;
    n.price=atoi(str.c_str());      // аналогично с 1ыми
 
    in>>str;
    strcpy(n.model,str.c_str());    // здесь мы тип string приводим к типу char* методом c_str()(т.к. функции strpy принимает только char* - указатель на char) а затем вызываем функцию strcpy
                                    // которая копирует str в массив символов model[21]
 
    a.push_back(n);              // добавляем в наш контейнер структуру n - метод push_back добавляет структуру в конецочереди, т.е. это аналогиятого
                                 // как мы кладём вещи в коробку - первая вещь будет снизу, т.е. 0, вторая будет над ней, т.е. 1 и т.д.
    }
}
 
// функция для простмотра вектора с структурами
void show(vector<NOTEBOOK> &a)
{
vector<NOTEBOOK>::iterator iter_a;      // создаем итератор для прохода по вектору со структурами, итератор - это своеобразный указатель, используемый для STL контекнеров, советую почитать, там всё просто
int i=0;        // просто счетчик для отображения номера структуры
    for(iter_a=a.begin();iter_a!=a.end();iter_a++)  // цикл - начинается с указателя a.begin() - начала ветора, и продолжается до a.end()... вообщем почти тоже самое что и обычный цикл
    {
    cout<<"Разрешение экрана : "<<a[i].disp.x<<" x "<<a[i].disp.y<<endl<<"Частота ГГц : "<<a[i].f<<endl<<"Диагональ экрана : "<<a[i].d<<endl<<"Цена : "<<a[i].price<<endl<<"Модель : "<<a[i].model<<endl<<endl;
    i++;    // итерируем счетчик
    }
}
 
// эту функцию мы передаем в sort , для ьтого, чтобы отсортировать вектор а по частоте
bool Compare(NOTEBOOK obj1, NOTEBOOK obj2)
{
return obj1.f > obj2.f;
}
 
void writeFile(vector<NOTEBOOK> a, ofstream &out)
{
out<<a.size();
vector<NOTEBOOK>::iterator iter_a;      // создаем итератор для прохода по вектору со структурами
int i=0;                                // просто счетчик для отображения номера структуры
unsigned short counter =(a.size());     // переменная 2 байта, хранящая кол-во структур NOTEBOOK
out.write(reinterpret_cast<char*> (&counter), sizeof(unsigned short ));    // записываем 2 байта с кол-вом структур в файл
    for(iter_a=a.begin();iter_a!=a.end();iter_a++)      // цикл
    {
    out.write(reinterpret_cast<char*> (&a[i]), sizeof(NOTEBOOK));   // записываем в файл
    i++;
    }
}
 
int main()
{
setlocale(LC_ALL, "Russian");
ifstream in("note.txt");
ofstream out("result",ios::binary);
vector <NOTEBOOK> a;
 
readNote(a,in);     // считываем в а данные из note.txt
show(a);            // выводим записанные данные
 
sort(a.begin(),a.end(),Compare);    // сортируем а по частоте f
cout<<"\nСортировка по убыванию частоты : \n\n";
show(a);            // выводим записанные данные
 
writeFile(a,out);
 
return 0;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru