如何确定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?
答案 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,则可以手动对所有多地图项进行迭代。