检查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 ++中是否已存在值的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JSTL 检查会话中是不是存在已登录用户?

将记录作为键映射 - 如何检查Erlang中是否存在密钥

查找索引数据库中是不是已存在值

用户在PEGA中输入值时,检查数据库中是否已存在用户名

CodeIgniter - 检查数据库中是不是已存在值

如何检查Ruby中是否已存在类