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

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

Войти
Регистрация
Восстановить пароль
 
Rostov61
Сообщений: n/a
#1

Решение задач без циклов, использую библиотеку algorithm - C++

08.12.2012, 20:26. Просмотров 354. Ответов 0
Метки нет (Все метки)

Имеется список 40 студентов, изучающих математику, физику, биологию и химию, заданный в файле в виде строк
Фамилия предмет
Каждый предмет изучает около 20 студентов. Разработать структуры данных, позволяющих эффективно отвечать на запросы вида «Выдать всех студентов, изучающих биологию и химию, но не изучающих физику».

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
template <typename T, typename T1>
T1 copy (T first, T last, T1 first2)
{
    while (first != last)
    {
        *first2 = *first;
        ++ first;
        ++ first2;
    }
    return first2;
}
 
#include <iostream>
#include <iomanip>
#include <vector>
#include <list>
#include <set>
#include <locale.h>
#include <ctime>
#include <iterator>
#include <algorithm>
#include <cstdlib>
#include <string>
#include <fstream>
#include <map>
#include "My.h"
 
using namespace std;
 
bool if_subject(string x)
{
    if ((x=="математика") || (x=="химия") || (x=="физика") || (x=="биология")) 
        return false;
}
 
struct subject {
    bool mathematics;
    bool physics;
    bool biology;
    bool chemistry; 
} ;
 
template <typename C>
class it_sum {
    C &c;
    subject stupid;
public:
        it_sum (C &cc): c(cc), sum(0) {}
        it_sum<C> &operator++() { return *this; }
        it_sum<C> &operator*() { return *this; }
        it_sum<C> &operator = ( typename C::value_type x) {stupid.biology=0; stupid.chemistry=0; stupid.mathematics=0; stupid.physics=0; c[x]=stupid; return *this; }       
};
 
template <typename C>
it_sum<C> iterator_sum (C &cc)
{
    return it_sum<C> (cc);
}
 
 
const char* infile = "input.txt";
 
int main()
{
    setlocale ( LC_ALL , "Russian" ) ;
    srand ( time ( 0 ) ) ;
    vector<string> buf;
    fstream file(infile, ios_base::in);
 
    if (!file)
    {
        cout << "Нет такого файла" << endl;
        return 0;
        
    }
    
        istream_iterator<string> f_it(file);
    istream_iterator<string> end_f;
    buf.resize(46);
        ::copy(f_it, end_f, buf.begin());
    ::copy ( buf.begin(), buf.end(), ostream_iterator<string> (cout, "  ")) ; 
    cout << endl << endl;
    stable_partition( buf.begin(), buf.end(), &subject);
    ::copy ( buf.begin(), buf.end(), ostream_iterator<string> (cout, "  ")) ;   
 
    set <string> name;
    map <set <string>, struct subject > data;
    vector<string>::iterator it = buf.begin();
    advance (it, buf.size()/2);
    ::copy(buf.begin(), it, iterator_sum(data));
 
    return 0;
}
Небольшая заготовка, которая читает инфу из файла в вектор, потом сортирует таким образом, чтоб шли фамилии, а потом предметы, дальше хочу map <set <string>, struct subject >, первое поле - фамилии, второе - предметы...
Пример входного файла:
Ав математика
Бу физика
Гу физика
До физика
Ма биология
Рек математика
Ур химия
Фе химия
Ха биология
Ше биология
Ма физика
Гу биология
Ре биология
Ко биология
Ко математика
Рек физика
Рек химия
Ко химия
Ре химия
Ре физика
Ве математика
Ку биология
Ст химия

Ещё один вопрос, как не задавая размер вектора вначале, читать данные из файла (т.е. если мы не знаем размер файла)
Буду благодарен за помощь!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.12.2012, 20:26     Решение задач без циклов, использую библиотеку algorithm
Посмотрите здесь:

Решение задач с помощью циклов - C++
1. Около стены наклонно стоит палка длиной х м. Один ее конец находится на расстоянии y м от стены. Определить значение угла  между палкой...

Методом рекурсии вывести число слево на право. Не использую массивов циклов строк - C++
Методом рекурсии вывести число слево на право. Не использую массивов циклов строк( а только рекурсию и арифметические операции) void...

сумма элементов массива без циклов - C++
нужно написать функцию написания подсчета суммы элементов массива не используя циклов, условий и используя рекурсию максимум 1 раз.

Решение лабораторных на С++ посредством циклов, одномерных и двумерных массивов - C++
Друзья! Я конечно понимаю что не один я тут такой &quot;новенький остолоп&quot;, но всё же был бы очень признателен если поможете с решением...

Перевернуть число без помощи массивов циклов - C++
перевернуть число без помощи массивов циклов и тд. т.е stdio.h ,если это вообще возможно?

Выход из двух циклов сразу (без goto) - C++
Здрасти, как можно выйти из нескольких циклов сразу? без goto. for (int i=0; i&lt;ROWS; i++) for (int j=0; j&lt;COLS; j++){ ...

Заполнение двумерного массива без вложенных циклов - C++
Как такое можно реализовать? Нужно каким-то образом плясать от индекса, как мне кажется, но вот как?

Преобразовать решение используя указатели (дано решение без указателей) - C++
Элемент матрицы назовем седловой точкой, если он является наименьшим в своей своей строке и одновременно наибольшим в своем столбце или,...

Вычислить сумму следующего ряда без вложенных циклов - C++
Hе используя стандаpтные функции (за исключением abs ), вычислить сумму следующего pяда с заданной точностью Е &gt; 0 без вложенных циклов. ...

Нужно найти библиотеку или готовое решение - C++
Доброе время суток. Подскажите, пожалуйста, библиотеку под C/C++, которая умеет работать с математическими выражениями и преобразовывать...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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