2010-05-07 6 views
-4

Мне нужно подсчитать похожие элементы в массиве. Например, если у меня есть массив, массив [0,0,0,1,2,3,3]. Число 0 равно 3, нет. 1 из них 1, нет. из 2-х являются 1, нет. из 3 - это 2 в этом массиве. Прошу прощения, если это сообщение было опубликовано ранее. Помощь приветствуется. Заранее спасибо.Count Аналогичные iTems в массиве

С уважением,

ТГМ

PS: Язык C/C++

+2

Это C или C++? Это очень разные языки. –

+3

Это домашнее задание? – n0rd

+0

@Mike ok, я извиняюсь, мне нужно это на C++. –

ответ

2

Я могу придумать несколько вариантов:

  1. копирование массива в std::multiset<>, а затем использовать функции-члены count() или equal_range() вернуть счетчики

  2. Создать std::map<T,unsigned>. Ключ карты (вашего типа ввода массива T, который будет интегральным типом из вашего примера) - это запись массива, значение - это счетчик. Увеличивайте счетчик, связанный со значением, каждый раз, когда вы сталкиваетесь с элементом с этим значением при повторении по массиву

  3. Если массив отсортирован, используйте std::equal_range(), чтобы найти последовательные равные элементы и посчитать их.

Есть, конечно, еще много, включая только повторение и подсчет напрямую.

5

Вы можете использовать зЬй :: карту для хранения и адаптировать свои результаты на основе массива-записи, в то время как итерация массив. Надеюсь, этот намек поможет вам в назначении.

0

А, я предполагаю, что это домашнее задание. Поправьте меня, если я ошибаюсь.

Как бы вы это сделали, если бы я попросил вас реализовать алгоритм? Вы можете видеть из вашего примера ввода, что легче подсчитывать членов каждой группы, когда ввод группируется, а не перетасовывается в произвольном порядке. Если вы отсортируете вход, вы получите различные элементы, сгруппированные. Затем вам просто нужно будет перебирать последовательность, чтобы подсчитать членов каждой группы.

Когда вы работаете с алгоритмом, попробуйте уточнить его, чтобы он никогда не читал элемент входной последовательности более одного раза. Если вы можете удовлетворить гарантию того, что каждый элемент будет считываться ровно один раз, и чтобы элементы читались в порядке от начала до конца, ваш алгоритм будет работать на вход, поступающий непосредственно из входного потока, такого как stdin (пока он будет отсортирован), без необходимости сначала копировать входные данные из входного потока во временный контейнер.

+0

Большое спасибо за такой подробный ответ. На самом деле это не мое задание. Мой собеседник попросил меня о помощи, i i IT-профессионал, работающий в доме программного обеспечения. На самом деле это было давно, так как я работал на C++. Theres мой frnd, который спросил меня для такого кода. Я разместил его здесь, думая, что могу быстро ответить –

Смежные вопросы