C++ 哈希集合
一个由唯一元素组成的无序集合被称为C++中的哈希集合。标准操作集合(例如remove、contains)在C++中的表示形式是交集、对称差和并集。对于元素的标识和搜索,哈希集合中的哈希函数在C++中非常有用。哈希集合在识别重复项方面起着重要作用。通过哈希函数,我们可以获取不同的值,甚至获取重复的值。无序列表(哈希集合)的时间复杂度为常数时间(O(1))。在其他情况下,时间复杂度为线性时间(O(n))。在这方面,我们将学习关于C++中的哈希集合的所有知识。
语法
在C++中,插入哈希集合或无序集合的语法如下:
int main()
{
unordered_set CBA ;
CBA.insert("") ;
CBA.insert("") ;
..................
}
一些使用C++哈希集的示例及其工作机制
一个 unordered_set 或 HashSet 是一个将键按任意顺序存储的集合。对于HashSet,有许多函数被使用。但是最常用的函数如下所述:
- size函数用于容量。
- empty函数也用于容量。
- find用于搜索键。
- Erase函数用于修改。
- 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在其中发挥了重要作用。