检查multimap c++中是否已经存在值

check if value already exists in multimap c++

本文关键字:存在 是否 multimap c++ 检查      更新时间:2023-10-16

如何发现Multimap已经包含特定值,以及如何找到包含相同键的项目总数?

std::multimap<float,int> obj;
obj.insert ( std::pair<char,int>('a',100) );
obj.insert ( std::pair<char,int>('a',100) );

例如,如果我想检查给定的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;
}

为了演示,我把映射做得更大了一点——你最初的多映射类型不正确——你需要把它做成<char, int>而不是<float, int>——因为转换,它被编译并"工作"了,但你绝对不希望在你的程序中出现这种情况。

对键的出现次数进行计数的部分使用多映射函数count,该函数从字面上计数给定键在多映射中的出现次数。

您可以查找给定容器的所有可用函数,并查看哪一个适用于您(如果有的话)。我使用https://en.cppreference.com/w/我更喜欢的网站http://www.cplusplus.com/一因此,对于该网站上的多映射,您可以获得与多映射直接相关的所有内容的列表。查找的好处之一是,您还可以在最新标准中看到新的选项。最后,这个网站的文档部分通常有一个内置的在线编译器/代码部分,您可以运行和编辑(以及在不同的编译器和标准下运行)。这提供了一个更好地理解功能并快速检查您是否有任何变化的机会。

第二部分统计映射中给定值的出现次数——这必须通过检查每个多映射条目及其值来"手动"完成。当然还有其他方法,但这对我来说是最简单的。对于带有常量引用的循环,它使用了一个更推荐的范围(因为它循环通过的条目不应该更改)。

这只检查一个固定值,但您可以通过创建一个常规映射来获得所有值的出现,其中键是多映射中的值,值是它们的计数。这并不难,将是一个很好的练习。

我想,你只能数std::对('a',100)项。看见http://www.cplusplus.com/reference/map/multimap/count/.

如果您只想计算"a"或100,您可以手动迭代所有多映射项。