检查值是否已经存在于 multimap C++ 中
check if value already exists in 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?
我想,你只能数
std::pair('a',100) 项。参见 http://www.cplusplus.com/reference/map/multimap/count/。
如果您只想计算 'a' 或 100,您应该手动迭代所有多地图项。
这是一个简短的代码,可以回答您的两个问题:
#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>
- 它已编译并且 "worked" 因为转换,但您肯定不希望在您的程序中使用它。
计算键出现次数的部分使用多映射函数 count
,该函数按字面意思计算给定键在多映射中的出现次数。
您可以查找给定容器的所有可用功能,看看哪一个适合您(如果有)。我使用与多图直接相关的所有内容的 https://en.cppreference.com/w/ website which I prefer over the http://www.cplusplus.com/ one. So for a multimap on that website you get a list。查找的好处之一是您还会看到符合最新标准的新选项。最后,这个网站通常在文档部分有一个内置的在线 compiler/code 部分,您可以 运行 和编辑(和 运行 在不同的编译器和标准下)。这让我们有机会更好地理解函数并快速检查您提出的任何变体是否有效。
第二部分计算给定值在映射中的出现次数 - 这必须通过检查每个多映射条目及其值来完成"manually"。当然还有其他方法,但这对我来说是最简单的。它使用更推荐的循环范围和常量引用(因为它正在循环的条目不应该改变)。
这只检查一个固定值,但您可以通过创建一个常规映射来获取所有值的出现,其中键是多重映射中的值,值是它们的计数。这个不难,也是很好的练习。
我如何找到一个 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?
我想,你只能数 std::pair('a',100) 项。参见 http://www.cplusplus.com/reference/map/multimap/count/。
如果您只想计算 'a' 或 100,您应该手动迭代所有多地图项。
这是一个简短的代码,可以回答您的两个问题:
#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>
- 它已编译并且 "worked" 因为转换,但您肯定不希望在您的程序中使用它。
计算键出现次数的部分使用多映射函数 count
,该函数按字面意思计算给定键在多映射中的出现次数。
您可以查找给定容器的所有可用功能,看看哪一个适合您(如果有)。我使用与多图直接相关的所有内容的 https://en.cppreference.com/w/ website which I prefer over the http://www.cplusplus.com/ one. So for a multimap on that website you get a list。查找的好处之一是您还会看到符合最新标准的新选项。最后,这个网站通常在文档部分有一个内置的在线 compiler/code 部分,您可以 运行 和编辑(和 运行 在不同的编译器和标准下)。这让我们有机会更好地理解函数并快速检查您提出的任何变体是否有效。
第二部分计算给定值在映射中的出现次数 - 这必须通过检查每个多映射条目及其值来完成"manually"。当然还有其他方法,但这对我来说是最简单的。它使用更推荐的循环范围和常量引用(因为它正在循环的条目不应该改变)。
这只检查一个固定值,但您可以通过创建一个常规映射来获取所有值的出现,其中键是多重映射中的值,值是它们的计数。这个不难,也是很好的练习。