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

Каков синтаксис оператора <?( меньше ) - C++

Восстановить пароль Регистрация
 
Buckstabue
 Аватар для Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
13.07.2012, 21:39     Каков синтаксис оператора <?( меньше ) #1
Надо было написать программу, считывающую количество слов, которые пользователь хочет ввести, затем программа считывает каждое слово и потом выводит 3 наиболее часто встречающихся слов.
Я решил немного упростить сортировку, применив алгоритм std::sort(). Вот теперь такая проблема: сортировка почему-то происходит по убыванию. Почему так? Для проверки программы достаточно ввести 5, затем a,a,a,b,b. И вы увидите, что вначале выводится элемент с меньшим значением
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
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <ostream>
 
#include <clocale>
 
using namespace std;
 
struct Task
{
      string name;
      int kol;
      Task( string name )
      {
         this->name = name;
         this->kol = 1;
      }
      bool operator==( const string &str ) const
      {
         return str == name;
      }
};
 
ostream & operator<<( ostream &out, const Task &x )
{
   return out << x.name << " " << x.kol << endl;
}
 
bool operator<( const Task &x1, const Task &x2 ) // вот эту функцию вызывает сортировка
{
   return x1.kol < x2.kol;
}
 
 
typedef vector<Task> TaskVector;
 
int main()
{
   setlocale( LC_ALL, NULL );
   int N;
   string curTaskName;
   TaskVector tasks;
 
   TaskVector::iterator taskIt;
 
   cout << "Введите количество слов: ";
   cin >> N;
   cin.ignore();
   for ( int i = 0; i < N; ++i )
   {
      cout << "Слово " << (i + 1) << ": ";
      getline( cin, curTaskName );
      taskIt = find( tasks.begin(), tasks.end(), curTaskName );
      if ( taskIt == tasks.end() )
         tasks.push_back( Task(curTaskName) );
      else
         ++(taskIt->kol);
   }
 
   sort( tasks.begin(), tasks.end() ); // сортировка здесь
 
   cout << "Результат:" << endl;
   if ( tasks.size() < 3 )
   {
      for( int i = 0; i < tasks.size(); ++i )
         cout << tasks[i];
   }
   else
   {
      for ( int i = 0; i < 3; ++i )
         cout << tasks[i];
      for ( int i = 3; i < tasks.size() && tasks[i].kol == tasks[2].kol; ++i )
         cout << tasks[i];
   }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
13.07.2012, 21:55     Каков синтаксис оператора <?( меньше ) #2
Цитата Сообщение от Buckstabue Посмотреть сообщение
Почему так?
Может потому что сортировка по умолчанию и есть сортировка по возрастанию, не?
Buckstabue
 Аватар для Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
13.07.2012, 22:25  [ТС]     Каков синтаксис оператора <?( меньше ) #3
Ну я туплю! Спасибо!
Avazart
 Аватар для Avazart
6900 / 5140 / 252
Регистрация: 10.12.2010
Сообщений: 22,591
Записей в блоге: 17
13.07.2012, 23:05     Каков синтаксис оператора <?( меньше ) #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
using namespace std;
//---------------------------------------------------------------------------
struct PrintArray
{
 void operator()(const int& i)const {cout<<i<<" ";}
} print;
//---------------------------------------------------------------------------
struct CmpInt
{
 bool operator()(const int& a,const int& b)const { return a>b;}
} cmp;
//---------------------------------------------------------------------------
int _tmain(int argc, _TCHAR* argv[])
{
system("chcp 1251");
 
int A[]={4,3,2,5,6,7,1};
for_each(&A[0],&A[7],print);  cout<<endl;
 
sort(&A[0],&A[7]);
for_each(&A[0],&A[7],print);  cout<<endl;
 
sort(&A[0],&A[7],cmp);
for_each(&A[0],&A[7],print);  cout<<endl;
 
sort(&A[0],&A[7],greater<int>() );
for_each(&A[0],&A[7],print);  cout<<endl;
 
 
system("pause");
return 0;
}
//---------------------------------------------------------------------------
Вывод:
Код
Текущая кодовая страница: 1251
4 3 2 5 6 7 1
1 2 3 4 5 6 7
7 6 5 4 3 2 1
7 6 5 4 3 2 1
Для продолжения нажмите любую клавишу . . .
Yandex
Объявления
13.07.2012, 23:05     Каков синтаксис оператора <?( меньше )
Ответ Создать тему
Опции темы

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