检查Multimap C ++中是否已经存在值

时间:2019-01-20 12:31:19

标签: c++ c++11 multimap

如何确定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?

2 个答案:

答案 0 :(得分:4)

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

result.select("probability").head().apply(0).asInstanceOf[DenseVector].toArray()

我将地图放大了一些以进行演示,而且-您最初的多地图类型不正确-您需要将其设置为#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>-由于进行了转换,因此它已编译并“工作”但您绝对不希望在程序中使用它。

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

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

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

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

答案 1 :(得分:-1)

我认为,您只能指望 std :: pair('a',100)项目。参见http://www.cplusplus.com/reference/map/multimap/count/

如果您只想计算“ a”或100,则可以手动对所有多地图项进行迭代。