Din*_*ama 0 c++ multimap c++11
我如何发现 aMultimap已经包含特定值,以及如何查找包含相同键的项目总数?
std::multimap<float,int> obj;
obj.insert ( std::pair<char,int>('a',100) );
obj.insert ( std::pair<char,int>('a',100) );
Run Code Online (Sandbox Code Playgroud)
例如,如果我想检查给定的multimapobj 是否已包含 100 个值,我该如何检查它以及如何获取包含字符 a 的项目数为 2?
这是一个简短的代码,可以回答您的两个问题:
#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;
}
Run Code Online (Sandbox Code Playgroud)
我将地图制作得更大一点以进行演示,而且 - 您最初的多重地图类型不正确 - 您需要制作它<char, int>而不是<float, int>- 它由于转换而编译并“工作”,但您绝对不希望在您的程序中出现这种情况。
计算键出现次数的部分使用多重映射函数count,该函数按字面意思计算多重映射中给定键的出现次数。
您可以查找给定容器的所有可用功能,并查看哪一个适合您(如果有)。我使用https://en.cppreference.com/w/网站,我更喜欢它而不是http://www.cplusplus.com/网站。因此,对于该网站上的多重地图,您将获得与多重地图直接相关的所有内容的列表。查找的好处之一是您还将看到最新标准中的新选项。最后,该网站的文档部分通常有一个内置的在线编译器/代码部分,您可以运行和编辑(并在不同的编译器和标准下运行)。这使我们有机会更好地理解这些功能并快速检查您提出的任何变体是否有效。
第二部分计算映射中给定值的出现次数 - 这必须通过检查每个多重映射条目及其值来“手动”完成。当然还有其他方法,但这对我来说是最简单的。它使用更推荐的循环范围和常量引用(因为它循环的条目不应该改变)。
这仅检查一个固定值,但您可以通过创建一个常规映射来获取所有值的出现次数,其中键是多重映射中的值,值是它们的计数。这并不困难,并且将是一个很好的练习。