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

问题描述 投票:0回答:2

我如何发现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?

c++ c++11 multimap
2个回答
4
投票

这是一个简短的代码,可以回答您的两个问题:

#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/网站。因此,对于该网站上的多图,您可以获得与多图直接相关的所有内容的list。查找的一个好处是,您还将看到最新标准中的新选项。最后,该网站通常在文档部分中有一个内置的在线编译器/代码部分,您可以运行和编辑(并在不同的编译器和标准下运行)。这为更好地理解功能提供了机会,并可以快速检查您是否有任何变化。

第二部分计算地图中给定值的出现 - 这必须通过检查每个多图表条目及其值来“手动”完成。肯定有其他方法,但这对我来说是最简单的。它使用一个更推荐的循环范围用于循环和常量引用(因为它循环的条目不应该改变)。

这只检查一个固定值,但您可以通过创建一个常规地图来获取所有值的出现,其中键是多图的值,值是它们的计数。这并不困难,将是一个很好的锻炼。


-1
投票

我想,你可以只计算std :: pair('a',100)项。见http://www.cplusplus.com/reference/map/multimap/count/

如果您只想计算'a'或100,则应手动迭代所有多图项。

© www.soinside.com 2019 - 2024. All rights reserved.