Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.60/25: Рейтинг темы: голосов - 25, средняя оценка - 4.60
3 / 3 / 1
Регистрация: 04.04.2018
Сообщений: 351

Найти количество повторяющихся элементов в multiset

19.10.2019, 17:42. Показов 5424. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Собственно из названия понятно что я хочу сделать)
Вот код, закомментированый элемент не работает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include<iostream>
#include<string>
#include<set>
using namespace std;
 
int main() {
    setlocale(LC_ALL, "Rus");
    string str;
    char a;
    getline(cin,str);
        multiset<char> multstr;
        for (int i = 0; i < str.size(); i++)
        {
            multstr.insert(str[i]);
        }
        /*for (auto &item : multstr) {
            cout << "\n\nElement: " << item;
            a = multstr.count(item);
            cout << "\nEgo kolichestvo: " << a;
        }*/
    system("pause");
    return 0;
}
Добавлено через 1 час 54 минуты
Т. е., есть строка которая содержит произвольный текст, мне нужно узнать какая буква и сколько раз она повторяется обязательно использовать set\multiset
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.10.2019, 17:42
Ответы с готовыми решениями:

Найти количество не повторяющихся элементов в массиве
Знаю что условие в цикле не то, но больше в голову нечего не лезет. У кого идеи есть? #include &lt;iostream&gt; #include...

Найти количество повторяющихся элементов
визуальное программирование. Дан массив типа char. Выяснить, имеются ли повторяющиеся элементы, если да, то вывести эти элементы и...

Как найти среднее арифметическое положительных элементов и подсчитать количество повторяющихся элементов массива
Добрый день! Вот задача: Дан одномерный массив. 1) найти среднее арифметическое положительных элементов. 2) подсчитать количество...

29
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 1
20.10.2019, 18:15
Студворк — интернет-сервис помощи студентам
S_el, поменял.
elapsed_mseconds= 131
elapsed_mseconds= 395
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
20.10.2019, 18:29
Цитата Сообщение от IGPIGP Посмотреть сообщение
it=upper_bound(it, chars.end(), *it);
Это "палёный" upper_bound и для данной задачи неэффективен. Нужно использовать chars.upper_bound(...).
2
 Аватар для Новичок
1682 / 1098 / 489
Регистрация: 17.07.2012
Сообщений: 5,361
20.10.2019, 18:30
А вы в курсе что multiset.count работает не за чистый логарифм ? Логарифм + количество. Помню на codeforces какая-то задача у меня из-за этого по времени не прошла, тогда я узнал и запомнил(на всю жизнь ) что multiset.count работает за O(log N + K), где K = количество найденных элементов. Я правда не знаю как написать тест, на котором это скажется, но я решал бы эту задачу с std::map.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <string>
#include <map>
 
int main() {
    std::string s;
    std::getline(std::cin, s);
    std::map<char, int> count;
    for (char c: s) count[c]++;
    for (const auto &res: count) {
        std::cout << res.first << ' ' << res.second << '\n';
    }
}
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
20.10.2019, 18:33
Цитата Сообщение от Croessmah Посмотреть сообщение
S_el, поменял.
Теперь сомнений нет. Замерил и у себя. advance ~ в 3 раза быстрее upper_bound windows gcc без оптимизаций.
Сейчас еще студийным замерю.

update:
на студийном advance все равно быстрее примерно с такой разницей.
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
20.10.2019, 18:44
А я ничего не менял. Однако первый вариант стал значительно медленнее. Что-то в системе перестроилось... Сейчас advance побеждает везде.

Добавлено через 3 минуты
Цитата Сообщение от S_el Посмотреть сообщение
на студийном advance все равно быстрее примерно с такой разницей
Не могу повторить тот тест. В чём тут дело, не понимаю. Студия кстати ныла что будет апдейтиться. Но не думаю, что всё так хитро получилось. Чудеса.

Добавлено через 2 минуты
Цитата Сообщение от Новичок Посмотреть сообщение
А вы в курсе что multiset.count работает не за чистый логарифм ?
Новичок, када идёт захват слева и справа (от цепи повторов) там лог. Может не совсем чистый.

Добавлено через 1 минуту
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Это "палёный" upper_bound и для данной задачи неэффективен. Нужно использовать chars.upper_bound(...).
nonedark2008, да вы чо?! Щас попробую))
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
20.10.2019, 18:44
Цитата Сообщение от IGPIGP Посмотреть сообщение
Сейчас advance побеждает везде.
Добавьте chars.upper_bound как в моем первом сообщении и которое выбирает nonedark2008, на моих компиляторах этот вариант в ~2 раза быстрее чем advance
1
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 1
20.10.2019, 18:48
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Это "палёный" upper_bound
Я даже не заметил, что там std::upper_bound
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
20.10.2019, 18:53
Цитата Сообщение от IGPIGP Посмотреть сообщение
Щас попробую))
А с ним вдвое быстрее чем advance в обоих компиляторах! И это несмотря на то, что он вызывается по ключу только и нельзя задать пару итераторов. То есть, тупо просматривает весь контейнер, но всё равно быстрее. Вот что святой крест бинарный алгоритм делает!
Но ведь глядя на
Цитата Сообщение от nonedark2008 Посмотреть сообщение
"палёный" upper_bound
остаётся признать, что дурют нашего брата. Внутрях у upper_bound - последовательный просмотр... Вот это да... Ч-черт. Полезно однако задавать дурацкие вопросы иной раз. Спасибо nonedark2008!
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
20.10.2019, 19:30
Цитата Сообщение от IGPIGP Посмотреть сообщение
что дурют нашего брата
Не то чтобы дурят. Там под капотом почти всегда обычный бинарный поиск, гарантирующий O(log2(n)) сравнений. Но, думаю, всем понятно, к чему это приведет на итераторах неслучайного доступа.
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
20.10.2019, 19:36
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Но, думаю, всем понятно, к чему это приведет на итераторах неслучайного доступа.
nonedark2008, вы правы. К сожалению не существует способа получить ссылку на контейнер по итератору инициализированному через него. Таким образом внутри upper_bound нельзя выбрать алгоритм для дерева. Я когда-то это видел. Но забыл. Хорошая ступенька чтобы споткнуться. Интересно, а в топике:
Распространенные ошибки
есть упоминание такой? Ошибка чисто логическая. Может успешно "работать" годами и никто не увидит)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.10.2019, 19:36

найти количество повторяющихся элементов в массиве
//найти количество повторяющихся элементов в массиве (решить алгоритмически) //вот наброски $arr=;//ответ 8 $n=count($a);...

Найти Количество повторяющихся элементов в List
Добрый День есть переменная List Как пример (Не стал писать полный лист) Необходимо вывести Сколько повторений было в нашем листе...

Найти количество повторяющихся элементов в массиве
Ребят выручайте, помогите вывести в лейбл5 количество повторяющихся эллементов в массиве...вот код..(( Private Sub Button2_Click(ByVal...

В целочисленном массиве найти количество повторяющихся элементов
В целочисленном массиве нужно найти количество повторяющихся элементов. Как это сделать кто-то может подсказать?

Найти количество повторяющихся строк (элементов) в текстовом файле
Прошу помощи у экспертов. Нужно подсчитать из текстового файла количество всех повторяющихся строк(элементов). Нужно использовать List?...


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

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Новые блоги и статьи
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru