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

Найти первые пять самых повторяющихся элементов массива и количество их вхождений - C++

Восстановить пароль Регистрация
 
Permament
0 / 0 / 0
Регистрация: 02.10.2011
Сообщений: 6
03.10.2011, 12:27     Найти первые пять самых повторяющихся элементов массива и количество их вхождений #1
Есть отсортированный по возрастанию массив. Надо найти первые пять самые повторяющиеся и их кол-во вхождений.

Например
1111111222222333334444555667
Ответ будет
1 2 3 4 5

Как реализовать данный алгоритм?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.10.2011, 12:27     Найти первые пять самых повторяющихся элементов массива и количество их вхождений
Посмотрите здесь:

C++ Пять самых длинных слов
Найти 3 самых больших и 3 самых маленьких числа в двумерном массиве C++
В целочисленном массиве найти количество повторяющихся элементов C++
Найти самых больших элементов массива, являющихся простыми числами C++
C++ Найти максимальный из повторяющихся элементов двумерного массива
Найти число повторяющихся элементов массива C++
C++ Определить количество повторяющихся элементов для каждого массива
C++ Найти количество не повторяющихся элементов в массиве

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
03.10.2011, 14:49     Найти первые пять самых повторяющихся элементов массива и количество их вхождений #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
#include <string>
#include <iostream>
#include <map>
#include <algorithm>
 
using namespace std;
 
int main()
{
   const char s[]="2222223333311111114444555667";
   map<char, int> cnt;
   
   for(const char *p = s; *p; ++p)
   {
      cnt[*p]++;   
   }
   
   vector<pair<char, int> > v(cnt.begin(), cnt.end());
   
   sort(v.begin(), v.end(), 
      [](const std::pair<char, int>& e1, const std::pair<char, int>& e2)
      {
         return e1.second > e2.second;
      }
   );
   
   for(size_t i = 0; i < 5 && i < v.size(); i++)
   {
      cout<<v[i].first<<": "<<v[i].second << endl;
   }
}
Добавлено через 1 минуту
Компилилось здесь: http://liveworkspace.org
soft.creator
 Аватар для soft.creator
103 / 103 / 4
Регистрация: 17.10.2010
Сообщений: 283
03.10.2011, 18:45     Найти первые пять самых повторяющихся элементов массива и количество их вхождений #3
C++
1
2
3
4
      [](const std::pair<char, int>& e1, const std::pair<char, int>& e2)
      {
         return e1.second > e2.second;
      }
Интересный способ задания лямбда-функции. В С++ [] имеют еще какой-то особый смысл?
P.S. Светлая память студенту, который будет это сдавать ))
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
03.10.2011, 18:46     Найти первые пять самых повторяющихся элементов массива и количество их вхождений #4
soft.creator, да, стандарт 0x.
Permament
0 / 0 / 0
Регистрация: 02.10.2011
Сообщений: 6
03.10.2011, 19:01  [ТС]     Найти первые пять самых повторяющихся элементов массива и количество их вхождений #5
Цитата Сообщение от gooseim Посмотреть сообщение
C++
1
   map<char, int> cnt;
Что это за контейнер?

Цитата Сообщение от gooseim Посмотреть сообщение
C++
1
std::pair<char, int>& e1, const std::pair<char, int>& e2)
что делает std:air?
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
03.10.2011, 20:20     Найти первые пять самых повторяющихся элементов массива и количество их вхождений #6
Цитата Сообщение от Permament Посмотреть сообщение
Что это за контейнер?
Контейнер map, как ни странно. Ещё называют "словарь". Отображает множество значений на множество ключей, таким образом, можно эффективно найти значение по ключу (не забываем, что и ключи, и значения могут быть не только простыми типами, но и пользовательскими, например, можно отобразить множество значений типа std::vector на множество ключей типа std::string).

Цитата Сообщение от Permament Посмотреть сообщение
что делает std:: pair?
Стандартный класс, имеет только два поля - first и second, к которым можно обращаться непосредственно.
Yandex
Объявления
03.10.2011, 20:20     Найти первые пять самых повторяющихся элементов массива и количество их вхождений
Ответ Создать тему
Опции темы

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