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

STL - C++

Восстановить пароль Регистрация
 
tetra91
0 / 0 / 0
Регистрация: 19.05.2010
Сообщений: 9
21.06.2010, 16:18     STL #1
Есть такая задача...
Каждая строка текстового файла DATA.TXT содержит информацию о студенте, предмете и оценке, полученной по этому предмету.
Данные разделены точкой с запятой, все остальные символы являются частью данных. Все строки различны, однако никакой сортировки нет.
Необходимо прочитать данные из файла в контейнер вида
map < студент, vector <pair <предмет, оценка> > >
После этого требуется обработать файл запросов QUERY.TXT, каждая строка которого соответствует одному запросу.
Возможны следующие строки с запросами:
1:студент
Требуется вывести всю информацию об успеваемости указанного студента
2:предмет
Требуется вывести информацию о количестве оценок, выставленных по указанному предмету
3:
Требуется вывести все различные пары <предмет, оценка> (для обработки этого запроса можно создавать дополнительные контейнеры).
Результаты обработки запросов поместить в текстовый файл ANSWER.TXT в удобном для чтения виде.
Порядок вывода результатов должен соответствовать порядку запросов.
Предусмотреть ситуацию, когда информация из запросов отсутствует во входном файле.

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
139
140
141
142
143
/*MyPair*/
#pragma once
#include <iostream>
#include <string>
#include <map>
#include <fstream>
#include <sstream>
using namespace std;
 
class MyPair
{
private: 
    pair<string,string> mypair;
public:
    string getMark(){return mypair.second;};
    string getSub(){return mypair.first;};
    void setPair(string s, string m){mypair.first=s; mypair.second=m;};
    void writeToStream(ostream& s){
    s << mypair.first << " " << mypair.second;}
 
    void writeToFile(const string filename)
    {ofstream out(filename.c_str()); writeToStream(out);};
 
    void print_pair()
    {
        cout<<getSub()<<" "<<getMark()<<endl;
    }
};
 
/*MyVector*/
#pragma once
#include "MyPair.h"
#include <fstream>
#include <sstream>
#include <vector>
 
class MyVector
{
    vector<MyPair> myvect;
public:
    
    void setVector(MyPair m1)
    {myvect.push_back(m1);}
 
    void writeToStream(ostream& s)
    {
    vector<MyPair>::iterator t;
    for(t=myvect.begin();t!=myvect.end();t++)
        s << t->getSub()<< t->getMark();
    }
 
    void writeToFile(const string filename)
    {ofstream out(filename.c_str()); writeToStream(out);};
 
    void print_vector()
    {
        vector<MyPair>::iterator t;
        for(t=myvect.begin();t!=myvect.end();t++){
            t->print_pair();}
    }
};
 
/*Student*/
#pragma once
#include "StdAfx.h"
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
using namespace std;
class Student
{
private:
    string name;
    string surname;
public:
    Student(string n, string s):
      name(n), surname(s){};
      Student(){};
    Student(string s){
    istringstream is(s);
    is >> surname;
    is >> name;}
    string getName() const {return name;};
    string getSurname() const {return surname;};
    void setName(string new_name) {this->name=new_name;};
    void setSurname(string new_surname){this->surname=new_surname;};
    void setStudent( string new_name,string new_surname){setName(new_name);setSurname         (new_surname);};
    void writeToStream(ostream& s){
    s << getSurname() << " " << getName();}
    void print_Student(){cout<<getSurname()<<"  "<< getName()<<endl;}
    void writeToFile(const string filename)
    {ofstream out(filename.c_str()); writeToStream(out);};
};
 
/*Data*/
#pragma once
#include "Student.h"
#include "MyPair.h"
#include "MyVector.h"
#include <fstream>
#include <sstream>
 
class Data
{
 
private:
    map< Student, MyVector> data;
 
public:
    void writeToFile(const string filename)
    {ofstream out(filename.c_str()); writeToStream(out);};
    
    void setData(Student s1, MyVector v1){ data.insert(make_pair(s1,v1));};
    void writeToStream(ostream& s)
    {
        map<Student, MyVector>::iterator t;
        for (t = data.begin(); t != data.end(); ++t)
        {
            s << t->first.writeToStream(s)<< t->second.writeToStream(s);
            
        }
    
    };
};
 
 
 
/*main*/
int main()
{
    setlocale(LC_ALL,".1251");
    MyPair m1;
    m1.setPair("Proga","8");
    MyVector v1;
           v1.setVector(m1);
           Student s1;
           s1.setStudent("Ivan", "Ivanov");
           Data d1;
           d1.setData(s1,v1);
    return 0;
 
}

Почему вылазят ошибки такого рода:
error C2784: 'bool std::operator <(const std::vector<_Ty,_Alloc> &,const std::vector<_Ty,_Alloc> &)' : could not deduce template argument for 'const std::vector<_Ty,_Alloc> &' from 'const Student' d:\учёба\visual studio 2005\vc\include\functional 143

error C2784: 'bool std::operator <(const std::reverse_iterator<_RanIt> &,const std::reverse_iterator<_RanIt2> &)' : could not deduce template argument for 'const std::reverse_iterator<_RanIt> &' from 'const Student' d:\учёба\visual studio 2005\vc\include\functional 143

error C2784: 'bool std::operator <(const std:: pair<_Ty1,_Ty2> &,const std:: pair<_Ty1,_Ty2> &)' : could not deduce template argument for 'const std:air<_Ty1,_Ty2> &' from 'const Student' d:\учёба\visual studio 2005\vc\include\functional 143

error C2784: 'bool std::operator <(const std::basic_string<_Elem,_Traits,_Alloc> &,const std::basic_string<_Elem,_Traits,_Alloc> &)' : could not deduce template argument for 'const std::basic_string<_Elem,_Traits,_Alloc> &' from 'const Student' d:\учёба\visual studio 2005\vc\include\functional 143

error C2784: 'bool std::operator <(const std::basic_string<_Elem,_Traits,_Alloc> &,const _Elem *)' : could not deduce template argument for 'const std::basic_string<_Elem,_Traits,_Alloc> &' from 'const Student' d:\учёба\visual studio 2005\vc\include\functional 143

error C2784: 'bool std::operator <(const std::_Tree<_Traits> &,const std::_Tree<_Traits> &)' : could not deduce template argument for 'const std::_Tree<_Traits> &' from 'const Student' d:\учёба\visual studio 2005\vc\include\functional 143

error C2784: 'bool std::operator <(const _Elem *,const std::basic_string<_Elem,_Traits,_Alloc> &)' : could not deduce template argument for 'const _Elem *' from 'const Student' d:\учёба\visual studio 2005\vc\include\functional 143

error C2676: binary '<' : 'const Student' does not define this operator or a conversion to a type acceptable to the predefined operator d:\учёба\visual studio 2005\vc\include\functional 143


Как их исправить?
И подскажите пожалуйста как организовать чтение из файлов(см. услвие)...
Заранее благодарю за ответы...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.06.2010, 16:18     STL
Посмотрите здесь:

C++ STL
C++ STL в С++
STL C++
STL C++
C++ STL
STL C++
C++ STL
C++ STL

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

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

Текущее время: 10:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru