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

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

Войти
Регистрация
Восстановить пароль
 
DebieCooper
34 / 34 / 1
Регистрация: 12.10.2011
Сообщений: 294
#1

STL небольшие исправления - C++

21.03.2012, 11:38. Просмотров 350. Ответов 0
Метки нет (Все метки)

Доброго времени суток. Помогите пожалуйста немного переделать программу. Вместо вектора мне нужна сделать очередь, ключом должен быть водитель (т.е "name"), вместо того чтобы выводить список различных маршрутов (nm), нужно выводить список всех водителей (name) работающих на одной марке автобуса (mark). Буду очень благодарен.
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
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
#include <list>
#include <algorithm>
#include <iterator>
#include <vector>
#include <map>
#include <set>
 
using namespace std;
struct bus
{
  int  nm;
  string name;
  int num_bus;
  string marka;
};
 
 bool sr_nm (bus &a,bus &b){return a.nm<b.nm;}
 bool sr_num (bus &a, bus &b){return a.num_bus<b.num_bus;}
 
 
int _tmain(int argc, _TCHAR* argv[])
{
 
 
  setlocale ( 0, "RUS" );
  vector<bus> ls;
  ifstream in ( "infile.txt" ); ofstream out ( "outfile.txt" );
 
       int  n;
 
    in >> n;
    for(int i=0; i<n; i++)
    {
     bus p;
     in>>p.nm>>p.name>>p.num_bus>>p.marka;
     ls.push_back(p);
    }
    vector<bus>:: iterator i;
    for(i=ls.begin(); i!=ls.end(); i++)
      cout<<i->nm<<" "<<i->name<<" "<<i->num_bus<<" "<<i->marka<<endl;
     cout<<endl;
 
 
    sort(ls.begin(), ls.end(),sr_nm);
    for(i=ls.begin(); i!=ls.end(); i++)
    cout<<i->nm<<" "<<i->name<<" "<<i->num_bus<<" "<<i->marka<<endl;
    cout<<endl;
 
 
    sort(ls.begin(), ls.end(),sr_num);
    for(i=ls.begin(); i!=ls.end(); i++)
    cout<<i->nm<<" "<<i->name<<" "<<i->num_bus<<" "<<i->marka<<endl;
    cout<<endl;
    
    map< int, bus > m;
    
    for (i=ls.begin(); i!=ls.end(); i++)
        m.insert(pair < int, bus> ( (*i).num_bus, (*i) ) );
 
     cout<<"list marshrutow"<<endl;
    set< int > mar;
    set<int>::iterator r;
    for(i=ls.begin(); i!=ls.end(); ++i )
        mar.insert((*i).nm);
    for(r=mar.begin(); r!=mar.end(); ++r)
        cout<<*r<<endl;
    //_____________________________________________
    cout<<"vvedite nomer marshruta:"<<endl;
        int a;
        cin>>a;
        map < int, bus >::iterator z;
        z= m.find(a);
        if (z!=m.end()){
        do{
            cout<<(*z).second.num_bus<<endl;
            z++;
        } while (z!=m.upper_bound(a) );
        }
        else
        cout<<" takih net"<<endl;
//_____________________________
      
 
      int o;
      cin>>o;
    return 0;
}
Добавлено через 11 часов 24 минуты
Апаю темку

Добавлено через 38 минут
Поменял код. Теперь у меня проблема в 51-56 строке. Не знаю как вывести элементы очереди.
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
#include <iostream>
#include <queue>
#include <fstream>
#include <string>
#include <list>
#include <algorithm>
#include <iterator>
#include <vector>
#include <map>
#include <set>
using namespace std;
 
struct bus
{
  int  nm;
  string name;
  int num_bus;
  string marka;
  friend ostream&operator<<(ostream&os,bus opa);
};
 
 bool sr_nm (bus &a,bus &b){return a.nm<b.nm;}
 bool sr_num (bus &a, bus &b){return a.num_bus<b.num_bus;}
 
 
 
int main()
{
 
 
  setlocale (LC_ALL,"RUS");
  vector<bus> vec;  
  queue<bus> ls;
  ifstream in ( "infile.txt" ); ofstream out ( "outfile.txt" );
 
       int  n;
 
    in >> n;
    for(int i=0; i<n; i++)
    {
     bus p;
     in>>p.nm>>p.name>>p.num_bus>>p.marka;
     ls.push(p);
     vec.push_back(p);
    }
 
 
   
    vector<bus>:: iterator q;
 
    while (!ls.empty())
    {
 
        out<<ls.front();
        ls.pop();
    }
 
 
 
 
 
 
    
     
 
 
    sort(vec.begin(), vec.end(),sr_nm);
    for(q=vec.begin(); q!=vec.end(); q++)
    cout<<q->nm<<" "<<q->name<<" "<<q->num_bus<<" "<<q->marka<<endl;
    cout<<endl;
    
 
 
    /*sort(ls.begin(), ls.end(),sr_num);
    for(i=ls.begin(); i!=ls.end(); i++)
    cout<<i->nm<<" "<<i->name<<" "<<i->num_bus<<" "<<i->marka<<endl;
    cout<<endl;*/
    
    map< int, bus > m;
    
    for (q=vec.begin(); q!=vec.end(); q++)
        m.insert(pair < int, bus> ( (*q).num_bus, (*q) ) );
 
     cout<<"Список маршрутов"<<endl;
    set< int > mn;
    set<int>::iterator r;
    for(q=vec.begin(); q!=vec.end(); ++q )
        mn.insert((*q).nm);
    for(r=mn.begin(); r!=mn.end(); ++r)
        cout<<*r<<endl;
    //_____________________________________________
    cout<<"Введите номер маршрута:"<<endl;
        int a;
        cin>>a;
        map < int, bus >::iterator z;
        z= m.find(a);
        if (z!=m.end()){
        do{
            cout<<(*z).second.num_bus<<endl;
            z++;
        } while (z!=m.upper_bound(a) );
        }
        else
        cout<<"Таких нет"<<endl;
//_____________________________
      
 
      int o;
      cin>>o;
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.03.2012, 11:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос STL небольшие исправления (C++):

Контрольная(исправления в коде) - C++
Здравствуйте. Прошу вашей помощи. Задачка состоитв следущем. Описать структуру с именем TRANSAIR, содержащую следующие поля: -...

2 небольшие функции - C++
Обьясните пожалуйста о чем написанно в этих двух функциях. Спасибо. int power(int a, int b, int n){// a^b mod n int tmp=a; ...

Небольшие вопросы - C++
Одномерный массив 1. Передвинуть элементы равные 0 в конец массива 2. Поменять местами массив, т.е. был 3 5 -9 0 1, стал 1 0 -9 5 3 ...

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

Небольшие задачи с массивами - C++
Доброго времени суток.Изучаю массивы,пытаюсь решить задачи.Написал,но не выходит.Нужен совет. 1)В массиве A из N элементов определить...

Небольшие изменение в коде - C++
Всем привет, у меня есть программка которая находит корни методом хорд. Я её скачал. По началу она выводила ответ сразу после запуска...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.03.2012, 11:38
Привет! Вот еще темы с ответами:

Сделать тесты небольшие - C++
Вот вообщем код который задает значения и нужно вписать ответ и если правильно пишет правильно если нет пишет нет и пишет ответ: ...

Найти причины и способы исправления ошибок в коде - C++
вот файл с которого считываю данных (не получается часть где группы вывести без повторений и подсчитать кол студентов и сумму их оценок) ...

Найти причины и способы исправления ошибок в коде - C++
Программа из 2 модулей падает в этом месте x=x*y; y=x/y; x=x/y; пишет что типа делить на ноль нельзя как исправить вот вся...

Найти причины и способы исправления ошибок в коде - C++
ввожу: 2 + тут он мне пишет &quot;???&quot; #include &lt;stdio.h&gt; #include &lt;iostream&gt; #include &lt;string&gt; int main(void) { int...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

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