Количество карт действительно считает или просто проверяет существование - PullRequest
2 голосов
/ 15 февраля 2020

В CPP учебнике для начинающих или на других веб-сайтах я нашел язык определения count (из map STL) очень расплывчатым и вводящим в заблуждение:

Поиск в контейнере элементов с ключом эквивалентно k и возвращает количество совпадений

Теперь, что я изучил до сих пор, это то, что key является единственным и сопоставленное значение - сопоставленное значение может быть изменено посредством присваивания.

Так разве он не возвращает, содержит ли контейнер ключ или нет? Вместо считать ? Где я не прав в понимании концепции?

Ответы [ 2 ]

5 голосов
/ 15 февраля 2020

A std::map 's count () всегда будет возвращать либо 0, либо 1.

Но библиотека C ++ имеет другие ассоциативные контейнеры, которые вполне могут иметь несколько значений для одного и того же ключа. Как std::multimap и std::multiset. И, по счастливой случайности, у них также есть метод count(), который может на самом деле возвращать значения больше 1.

Но это позволяет вам делать метапрограммирование, разрабатывая шаблоны, которые могут использовать любой ассоциативный контейнер, такой, который может или не может быть уникальным. Все, что нужно сделать вашему шаблону - это использовать count(), чтобы определить, сколько значений существует в контейнере с данным ключом, и конечный результат можно использовать с std::map или std::multimap. Это не заботится ни в малейшей степени. В обоих случаях ваш шаблон получит правильный ответ: количество значений в контейнере с заданным ключом.

1 голос
/ 15 февраля 2020

Согласно cplusplus.com

Поскольку все элементы в контейнере карты являются уникальными, функция может возвращать только 1 (если элемент найден) или ноль (в противном случае ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...