Почему в C ++ STL указан метод count () контейнера?

Что он действительно проверяет, так это содержит (), а не счетчик количества вхождений, верно? Дубликаты тоже не разрешеныt содержит () быть лучшим именем, чем count ()?

 Nils08 янв. 2014 г., 14:05
Бла-бла-последовательность это глупое имя!
 Xymostech14 мая 2013 г., 06:13
Я думаю это's, чтобы соответствоватьmultiset интерфейс, где могут быть дубликаты (и, таким образом,count() может вернуться>1). Не позитивно, хотя.
 taocp14 мая 2013 г., 06:09
Да, это немного сбивает с толку, так как set :: count () на самом деле выполняет работуcontains, Вероятно, по историческим причинам.

Ответы на вопрос(3)

Решение Вопроса

Это's, чтобы привести его в соответствие с другими классами контейнеров, учитывая, что одним из главных аспектов полиморфизма является возможность обрабатывать разные классы с помощью одного и того же API.

Этоделает на самом деле вернуть счет. Тот факт, что количество может быть только ноль или единица для набора, не меняет этот аспект.

Это'нев корне отличается от объекта коллекции, который допускает только две вещи каждого "значение" в то же время. В этом случае он вернет счетчик ноль, один или два, ноВсе еще считается, так же, как с набором.

Соответствующая часть стандарта, которая требует этого,C++11 23.2.4 который говорит об ассоциативных контейнерах,setmultisetmap а такжеmultimap, Таблица 102 содержит требования к этим ассоциативным контейнерам сверх требований для "регулярный» контейнеры и бит дляcount перефразируется ниже:

size_type a.count(k) - возвращает количество элементов с ключом, эквивалентнымk, Сложность есть.log(a.size()) + a.count(k)

 cade31 июл. 2017 г., 18:30
Что значитComplexity is log(a.size()) + a.count(k) имею в виду? Кажется рекурсивным :)
 paxdiablo03 авг. 2017 г., 03:30
@Cade, я немного волновался, чтоЯ неправильно переписал это, но нет. Это'нена самом деле рекурсивный, так как в вызове функции нет ничегоa.count(k) рассчитать сложность - этопросто заявив, что на сложность функции влияет количество элементов, соответствующих ключу.
 cade03 авг. 2017 г., 04:09
Хех, вау, так точно. Спасибо за ответ на вопрос q.

Все ассоциативные контейнеры должны соответствовать требованиям, перечисленным в §23.2.4 / 8 Таблица 102 - Требования к ассоциативным контейнерам, Одним из них является то, что они реализуютa.count(k) который тогда

возвращает количество элементов с ключом, эквивалентным k

Поэтому причина в том, чтобы иметь согласованный интерфейс между всеми ассоциативными контейнерами. Например, это единообразие будет очень важно при написании шаблонов универсальных функций, которые должны работать с любым ассоциативным контейнером.

Это's стандартная операция над контейнерами, которая возвращает количество подходящих элементов. В таких вещах, как списки, это имеет смысл. Просто так получилось, что на множестве может быть только одно вхождение элемента и, следовательно,count никогда не сможет вернуть значение больше 1. "

 Gian14 мая 2013 г., 07:01
Вы'верно. Я действительно просто махнул рукой в попытке назвать другой тип контейнера, а не конкретно в STL; скорее простолюбой тип, который может иметьcount метод. @paxdiablo упомянул множество конкретных контейнеров, которыеделать есть метод подсчета.
 StackedCrooked14 мая 2013 г., 06:50
В таких вещах, как списки, это имеет смысл ». Но в std :: list нет метода подсчета.

Ваш ответ на вопрос