检查multimap c ++中是否已存在值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了检查multimap c ++中是否已存在值相关的知识,希望对你有一定的参考价值。
我如何发现Multimap
已经包含特定值,以及如何查找包含相同密钥的项目总数?
std::multimap<float,int> obj;
obj.insert ( std::pair<char,int>('a',100) );
obj.insert ( std::pair<char,int>('a',100) );
例如,如果我想检查给定的multimap
obj是否包含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') << "
b: " << obj.count('b')
<< "
c: " << obj.count('c') << "
";
// 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/网站。因此,对于该网站上的多图,您可以获得与多图直接相关的所有内容的list。查找的一个好处是,您还将看到最新标准中的新选项。最后,该网站通常在文档部分中有一个内置的在线编译器/代码部分,您可以运行和编辑(并在不同的编译器和标准下运行)。这为更好地理解功能提供了机会,并可以快速检查您是否有任何变化。
第二部分计算地图中给定值的出现 - 这必须通过检查每个多图表条目及其值来“手动”完成。肯定有其他方法,但这对我来说是最简单的。它使用一个更推荐的循环范围用于循环和常量引用(因为它循环的条目不应该改变)。
这只检查一个固定值,但您可以通过创建一个常规地图来获取所有值的出现,其中键是多图的值,值是它们的计数。这并不困难,将是一个很好的锻炼。
我想,你可以只计算std :: pair('a',100)项。见http://www.cplusplus.com/reference/map/multimap/count/。
如果您只想计算'a'或100,则应手动迭代所有多图项。
以上是关于检查multimap c ++中是否已存在值的主要内容,如果未能解决你的问题,请参考以下文章