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

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

Войти
Регистрация
Восстановить пароль
 
Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
#1

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

13.07.2012, 21:39. Просмотров 590. Ответов 3
Метки нет (Все метки)

Надо было написать программу, считывающую количество слов, которые пользователь хочет ввести, затем программа считывает каждое слово и потом выводит 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];
   }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.07.2012, 21:39     Каков синтаксис оператора <?( меньше )
Посмотрите здесь:

Синтаксис тернарного оператора - C++
Снова проблема в записи :wall: 14 строка, почему не работает? В стандартной записи под // пашет, а так нет. Объясните, если можно ...

Синтаксис тернарного оператора - C++
В общем, начал изучать cpp, загуглил задачи, вроде делаю потихоньку, но тут столкнулся с проблемой написания условия if. А задачка...

Не могу найти синтаксис оператора ? : - C++
День добрый. Подскажите синтаксис оператора ? : (по-моему так правильно). Есть строка кода: int iEnd = (vsi.nPos+vsi.nPage &lt;...

Перегрузка оператора меньше - C++
Пытаюсь перегрузить operator&gt; вот таким способом bool operator &gt; (Monster const &amp; l, Monster const &amp; r); Получаю в ответ: error...

Переопределение оператора "меньше" пользовательского типа для работы с set - C++
Понимаю, что чтобы хранить в set элементы некоторого класса, нужно переопределить оператор &lt; для этого класса. Оператор переопределен,...

Определить количество элементов массива, которые меньше предыдущего и меньше последующего - C++
В целочисленном,одномерном массиве определить кол-во элементов, которые меньше предыдущего и меньше последующего

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
13.07.2012, 21:55     Каков синтаксис оператора <?( меньше ) #2
Цитата Сообщение от Buckstabue Посмотреть сообщение
Почему так?
Может потому что сортировка по умолчанию и есть сортировка по возрастанию, не?
Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
13.07.2012, 22:25  [ТС]     Каков синтаксис оператора <?( меньше ) #3
Ну я туплю! Спасибо!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.07.2012, 23:05     Каков синтаксис оператора <?( меньше )
Еще ссылки по теме:

Каков тип строковых литералов? - C++
Каков тип rvalue строки &quot;Hello&quot;? const char* const или const char* ? const char* some1 = &quot;Hello&quot;;

Каков будет результат работы функции? - C++
Хочу разобраться в псевдокоде IDA. Подскажите пожалуйста, в интернете мало информации об этом. int __cdecl main(int argc, const char...

Цикл в цикле? Каков лучший вариант? - C++
Господа, поделитесь опытом, пожалуйста, для общего блага среди начинающих. Как лучше ввсего организовать цикл в цикле для решения...

Каков будет результат выполнения следующего кода? - C++
Каков будет результат выполнения следующего кода, а именно: вводится &quot;12-3&quot;; что будет в переменной х? double x; cin&gt;&gt;х; ...

Каков современный подход для работы со строками - C++
Здравствуйте, хотел узнать современный подход для работы со строками. В С++ так же используется библиотека #include &lt;string&gt;, а методы для...

Каков будет результат при заданных условиях - C++
А что если повторяющиеся элементы будут на 0 и 1 индексах


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

Или воспользуйтесь поиском по форуму:
Avazart
Эксперт С++
7115 / 5292 / 273
Регистрация: 10.12.2010
Сообщений: 23,400
Записей в блоге: 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     Каков синтаксис оператора <?( меньше )
Ответ Создать тему
Опции темы

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