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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Исправление ошибок в программе http://www.cyberforum.ru/cpp-beginners/thread724092.html
Здравствуйте! Занимаюсь написанием программы. В ходе написания возник следующий вопрос. В ходе выполнения нижеприведенного кода выдается ошибка: Необработанное исключение в "0x0f3957aa...
C++ Троичное дерево Доброго времени суток, задача следующая: Составить программу для определения количества предков каждой из вершин троичного дерева обходом "в ширину". При создании дерева пронумеровать вершины в... http://www.cyberforum.ru/cpp-beginners/thread724087.html
записывает в файл каракули C++
почему когда я ввожу данные мне в файл записывает каракули, и такое же когда ввивоже из файла на экран? #include <iostream> #include <iomanip> #include <ctime> #include <cctype> #include...
строки (считать, заменив все вхождения слова «Slovo» на слово «Znak») C++
Помогите, пожалуйста, как написать программку, которая считывает с клавиатуры строку символов, после чего выводит ее на экран, предварительно заменив в ней все вхождения слова «Slovo» на слово...
C++ Реализовать часы http://www.cyberforum.ru/cpp-beginners/thread724060.html
Вот такая проблема... не могу придумать, как реализовать часы... То есть, вот такая проблема, у меня есть два времени записанных таким образом: 00:00:00 и 00:00:00, всё это надо уметь складывать,...
C++ Найти простые числа в заданном диапазоне с помощью решета Эратосфена и вывести их в файл Для зачета задали написать программу для нахождения простых чисел от 1 до 1000000000 и вывод их в файл,чтобы программа делала все это меньше 5 минут,желательно с помощью решета Эратосфена. Как... подробнее

Показать сообщение отдельно
Rostov61
Сообщений: n/a

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

08.12.2012, 20:26. Просмотров 383. Ответов 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 >, первое поле - фамилии, второе - предметы...
Пример входного файла:
Ав математика
Бу физика
Гу физика
До физика
Ма биология
Рек математика
Ур химия
Фе химия
Ха биология
Ше биология
Ма физика
Гу биология
Ре биология
Ко биология
Ко математика
Рек физика
Рек химия
Ко химия
Ре химия
Ре физика
Ве математика
Ку биология
Ст химия

Ещё один вопрос, как не задавая размер вектора вначале, читать данные из файла (т.е. если мы не знаем размер файла)
Буду благодарен за помощь!
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru