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

Сортировать фамилию и возраст - C++

Восстановить пароль Регистрация
 
Rylezzzz
0 / 0 / 0
Регистрация: 04.06.2014
Сообщений: 6
04.06.2014, 09:56     Сортировать фамилию и возраст #1
Доброго времени суток, помогите решить задачу:
На входе список пар, состоящих из фамилии и возраста. Каждая пара представлена на отдельной строке, и сначала строчными латинскими буквами записана фамилия, затем целое число представляющее возраст.

Выведите этот список в том же формате и упорядоченный по убыванию возраста. В случае равенства возрастов, пара, содержащая большую в лексикографическом смысле фамилию, в списке должна идти раньше.

0 ≤ возраст ≤ 200
1 ≤ длина фамилии ≤ 20
1 ≤ количество строк с фамилией и возрастом ≤ 100000

Примеры
Входные данные
kozyrev 19
daneev 200
deadushki 200
butusov 0
Результат работы
deadushki 200
daneev 200
kozyrev 19
butusov 0


попробовал сделать так, но он просто тупо сортирует
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
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
using namespace std;
 
int main()
{   
    ifstream fin("in.txt");
 
    vector<string> y;
    string buf;
    while(fin >> buf)
        y.push_back(buf);
 
    for (int j = 1; j<y.size(); j++)
    for (int i = 0; i<y.size() - j; i++)
    if (y[i]<y[i + 1])
    {
        string b = y[i];
        y[i] = y[i + 1];
        y[i + 1] = b;
    }
    ofstream fout("out.txt");
    for (int i = 0; i<y.size(); i++)
        fout << y[i] << endl;
 
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
uglyPinokkio
325 / 228 / 41
Регистрация: 30.05.2014
Сообщений: 682
04.06.2014, 10:03     Сортировать фамилию и возраст #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Читать нужно в вектор структур и сортировать его std::sort с предикатом.
Rylezzzz
0 / 0 / 0
Регистрация: 04.06.2014
Сообщений: 6
04.06.2014, 10:14  [ТС]     Сортировать фамилию и возраст #3
можешь код написать?? а то уже ничего не соображаю, буду благодарен
uglyPinokkio
325 / 228 / 41
Регистрация: 30.05.2014
Сообщений: 682
04.06.2014, 13:22     Сортировать фамилию и возраст #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <clocale>
#include <algorithm>
#include <sstream>
 
using namespace std;
 
struct ppl_age
{
  std::string name;
  int age;
};
 
std::ostream& operator<< (std::ostream& stream, const ppl_age& age_rec)
{
   stream<<age_rec.name;
   stream<<" ";
   stream<<age_rec.age;
   return stream;
}
 
std::istream& operator>> (std::istream& stream, ppl_age& age_rec)
{
   stream>>age_rec.name;
   stream>>age_rec.age;
   return stream;
}
 
bool createTestFile()
{
   std::vector<ppl_age> age_records;
   ppl_age new_age_rec;
   new_age_rec.name = "btest";
   new_age_rec.age = 10;
   age_records.push_back(new_age_rec);
   new_age_rec.name = "btest";
   new_age_rec.age = 20;
   age_records.push_back(new_age_rec);
   new_age_rec.name = "atest";
   new_age_rec.age = 20;
   age_records.push_back(new_age_rec);
   ofstream fout;
   fout.open("ppl.txt");
   if(fout.is_open())
   {
      for(unsigned age_cnt = 0; age_cnt<age_records.size();age_cnt++)
      {
         fout << age_records[age_cnt] << endl;
      }
      fout.close();
   }
   else
   {
      cout << "Can't open output file" << endl;               
      return false;
   }   
   return true;
}
 
bool isFirstGreater(const ppl_age& first, const ppl_age&  second)
{
   if(first.age > second.age) 
      return true;
   if(first.age == second.age)
      return first.name<second.name;
   return false;
}
 
int main()
{
   createTestFile();
   std::vector<ppl_age> age_records;
   ifstream fin;
   fin.open ("ppl.txt");
   if(fin.is_open())
   {
      while(true)
      {
         ppl_age new_age_rec;
         fin>>new_age_rec;
         if(fin.good())
            age_records.push_back(new_age_rec);
         else
            break;
      }
      fin.close();
   }
   std::sort(age_records.begin(),age_records.end(),isFirstGreater);
   for(unsigned age_cnt = 0; age_cnt<age_records.size();age_cnt++)
   {
      cout << age_records[age_cnt] << endl;
   }
   system ("pause");
   return 0;
}
Примерно так. Условия поправишь по вкусу.
Rylezzzz
0 / 0 / 0
Регистрация: 04.06.2014
Сообщений: 6
04.06.2014, 13:24  [ТС]     Сортировать фамилию и возраст #5
СПАСИБО! огромное))
Yandex
Объявления
04.06.2014, 13:24     Сортировать фамилию и возраст
Ответ Создать тему
Опции темы

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