C++ 哈希集合

C++ 哈希集合

一个由唯一元素组成的无序集合被称为C++中的哈希集合。标准操作集合(例如remove、contains)在C++中的表示形式是交集、对称差和并集。对于元素的标识和搜索,哈希集合中的哈希函数在C++中非常有用。哈希集合在识别重复项方面起着重要作用。通过哈希函数,我们可以获取不同的值,甚至获取重复的值。无序列表(哈希集合)的时间复杂度为常数时间(O(1))。在其他情况下,时间复杂度为线性时间(O(n))。在这方面,我们将学习关于C++中的哈希集合的所有知识。

语法

在C++中,插入哈希集合或无序集合的语法如下:

int main()
{
unordered_set  CBA ;
CBA.insert("") ;
CBA.insert("") ;
..................
}

一些使用C++哈希集的示例及其工作机制

一个 unordered_setHashSet 是一个将键按任意顺序存储的集合。对于HashSet,有许多函数被使用。但是最常用的函数如下所述:

  1. size函数用于容量。
  2. empty函数也用于容量。
  3. find用于搜索键。
  4. Erase函数用于修改。
  5. insert函数也用于修改。

unordered_set 只允许唯一的键,而 unordered_multiset 通过它只允许重复的键。

示例

通过不同类型的示例,整个C++ HashSet的工作机制已经解释如下:

1)使用{…}的C++ HashMap示例,其为已初始化的列表:

使用C++的HashSet,在这里我们已经通过初始化列表{…}来初始化了集合。

代码:

#include 
#include 
int main()
{
std::unordered_set P { 2017, 2016, 2015 };
for (auto Q: P)
std::cout << Q << '\n';
return 0;
}

输出:

2015
2016
2017

2)使用二元谓词传递比较对象:

通过使用二元谓词集,可以在给定的示例中传递比较对象。集合的排序是使用两个相同类型的元素定义的。

代码:

#include 
#include 
struct JAVATPOINT {
template
bool operator()(const X& n, const X& p) const
{
return n > p;
}
};
int main()
{
std::set values = { 120, 80, 250 };
for (auto S: values)
std::cout << S << '\n';
return 0;
}

输出:

250
120
80

3)C++中使用insert、iteration、find和declaration的hashset的示例:

在下面的示例中,平均花费常数时间进行插入、删除和查找操作。在集合中,当键不存在时,示例中给出了查找函数。它返回 迭代器end() 。另一方面,当集合中存在键时,迭代器可以轻松返回到键的位置。对于作为指针的键值,使用迭代器来接收键,并可以使用 解引用 * 运算符 检索键。

代代码:

#include 
using namespace std;
int main()
{
unordered_set  CBA ;
CBA.insert("Developer") ;
CBA.insert("Programmer") ;
CBA.insert("tester") ;
CBA.insert("HR") ;
CBA.insert("Coder") ;
string key = "JAVATPOINT" ;
if (CBA.find(key) == CBA.end())
cout << key << " one of the best company." << endl << endl ;
else
cout << "retrieved" << key << endl << endl ;
key = "Programmer";
if (CBA.find(key) == CBA.end())
cout << key << "can not retrieve\n" ;
else
cout << "retrieved " << key << endl ;
cout << "\nhere is the designations : " < :: iterator itr;
for (itr = CBA.begin(); itr != CBA.end(); itr++)
cout << (*itr) << endl;
}

输出:

JAVATPOINT one of the best company.

retrieved Programmer

here is the designations :
HR
tester
Programmer
Coder
Developer

When the key data is not found in the order list:
JAVATPOINT one of the best company

Program can not retrieve

here is the designations :
HR
tester
Programmer
Coder
Developer

4)使用无序集合查找重复内容:

在下面的示例中,输入的是一组整数,在这个集合中查找重复项,并将其显示在输出中。

代码示例:

#include 
using namespace std;
void printDuplicates(int deepak[], int M)
{
unordered_set JAVATPOINT;
unordered_set similar;

for (int P = 0; P < M; P++)
{
if (JAVATPOINT.find(deepak[P]) == JAVATPOINT.end())
JAVATPOINT.insert(deepak[P]);
else
similar.insert(deepak[P]);
}
cout << "similar contents are : ";
unordered_set :: iterator start;
for (start = similar.begin(); start != similar.end(); start++)
cout << *start << " ";
}
int main()
{
int deepak[] = {9, 3, 6, 1, 6, 2, 4, 9, 5, 7, 0, 8};
int M = sizeof(Deepak) / sizeof(int);
printDuplicates(Deepak, M);
return 0;
}

输出:

similar contents are : 9 6

结论

在上述背景下,我们学习了C++中的HashSet及其工作机制。在本文中,我们还了解了C++中HashSet的各种应用,通过不同的示例来展示它们的工作方式。在查找重复内容和所需内容方面,C++ HashSet在其中发挥了重要作用。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程