首页 > 解决方案 > 检查多图C++中是否已经存在值

问题描述

我如何找出 aMultimap已经包含特定值,以及如何找到包含相同键的项目总数?

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?

标签: c++c++11multimap

解决方案


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

#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>- 由于转换,它已编译并“工作”,但您绝对不希望在您的程序中使用它。

计算键出现次数的部分使用 multimap 函数count,该函数从字面上计算给定键在 multimap 中的出现次数。

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

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

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


推荐阅读