Это короткий код, который отвечает на оба ваших вопроса:
#include <iostream>
#include <map>
int main()
{
// The map
std::multimap<char,int> obj;
obj.insert ( std::pair<char,int>('a',100) );
obj.insert ( std::pair<char,int>('a',100) );
obj.insert ( std::pair<char,int>('b',100) );
obj.insert ( std::pair<char,int>('b',200) );
obj.insert ( std::pair<char,int>('b',300) );
// Count occurrences of a key
std::cout << "a: " << obj.count('a') << "\nb: " << obj.count('b')
<< "\nc: " << obj.count('c') << "\n";
// Count occurrences of a value
int val = 100, count = 0;
for (const auto& entry : obj)
if (entry.second == val)
count++;
std::cout << "Value " << val << " occurred " << count << " times." << std::endl;
}
Я сделал карту немного больше для демонстрации, также - ваш первоначальный тип мультикарты был неправильным - вам нужно сделать ее <char, int>
вместо <float, int>
- она скомпилировалась и «работала» из-за преобразований, но вы определенно не не хочу этого в вашей программе.
Часть, которая подсчитывает вхождение ключа, использует функцию мультикарты count
, которая буквально подсчитывает вхождения данного ключа в мультикарте.
Вы можете посмотреть все доступные функции для данного контейнера и посмотреть, какая из них работает для вас, если таковые имеются. Я использую веб-сайт https://en.cppreference.com/w/, который я предпочитаю веб-сайту http://www.cplusplus.com/. Таким образом, для мультикарты на этом веб-сайте вы получаете список всего, что напрямую связано с мультикартой. Одним из преимуществ поиска является то, что вы также увидите новые опции в новейших стандартах. Наконец, на этом веб-сайте часто имеется встроенный раздел компилятора / кода в разделе документации, который вы можете запускать и редактировать (и запускать под разными компиляторами и стандартами). Это дает возможность лучше понять функции и быстро проверить, работают ли какие-либо варианты, с которыми вы столкнулись.
Вторая часть подсчитывает вхождение заданного значения в карту - это нужно сделать «вручную», проверив каждую запись в мультикарте и ее значение. Конечно, есть и другие пути, но это для меня самое простое. Он использует более рекомендуемый диапазон для цикла с постоянными ссылками (поскольку записи, через которые он проходит, не должны изменяться).
Это проверяет только одно фиксированное значение, но вы можете получить вхождения всех значений, создав регулярную карту с ключами, являющимися значениями из вашей мультикарты, а значениями являются их счетчики. Это не сложно и будет хорошим упражнением.