C++ STL中的unordered_set begin()函数
unordered_set是C++ STL中的关联容器之一,它以哈希表的形式存储数据,因此在插入、查找等操作上具有较高的性能表现。在使用该容器时,我们经常需要遍历其中的元素,因此begin()函数是必不可少的一个成员函数。
unordered_set介绍
在介绍begin()函数之前,我们先来了解一下unordered_set容器。
unordered_set是一个无序的集合容器,它允许存储一些不同的元素,这些元素可以是任何基本数据类型,也可以是自定义的结构体和对象。在unordered_set中,每个元素都有一个唯一的键值,这个键值被用来作为元素的索引,因此可以快速地访问和修改元素。
unordered_set具有以下特点:
- 插入和查找操作的时间复杂度为O(1),与元素的数量无关;
- unordered_set中的元素是无序的,因此无法使用迭代器进行顺序访问;
- 与map容器不同,unordered_set中的元素不是成对出现的,每个元素只有一个键值;
下面给出一个简单的示例代码,演示如何使用unordered_set容器:
#include <iostream>
#include <unordered_set>
using namespace std;
int main()
{
unordered_set<int> mySet;
mySet.insert(2);
mySet.insert(5);
mySet.insert(1);
mySet.insert(4);
mySet.insert(3);
mySet.insert(2);
cout << "mySet中的元素:";
for(int x : mySet)
cout << ' ' << x;
cout << endl;
mySet.erase(4);
cout << "mySet中的元素:";
for(int x : mySet)
cout << ' ' << x;
cout << endl;
return 0;
}
在这个示例中,我们使用了unordered_set
unordered_set begin()函数
unordered_set容器提供了一些成员函数,这些函数用于在集合中遍历元素或执行其他常见操作,其中begin()函数是最常用的一个。
begin()函数的作用是返回一个迭代器,指向unordered_set容器中的第一个元素。通过这个迭代器,我们可以依次访问集合中的所有元素。
下面给出一个简单的示例代码,演示如何使用begin()函数遍历unordered_set容器中的元素:
#include <iostream>
#include <unordered_set>
using namespace std;
int main()
{
unordered_set<int> mySet;
mySet.insert(2);
mySet.insert(5);
mySet.insert(1);
mySet.insert(4);
mySet.insert(3);
unordered_set<int> :: iterator it;
for(it = mySet.begin(); it != mySet.end(); it++)
{
cout << *it << ' ';
}
cout << endl;
return 0;
}
在这个示例中,我们使用了一个迭代器it来遍历集合中的元素。it初始化为mySet.begin(),即指向集合中的第一个元素,然后通过循环迭代器来访问集合中的每个元素,并依次输出。
代码示例
下面给出一个更为完整的代码示例,演示了如何使用unordered_set容器及其begin()函数。
#include <iostream>
#include <unordered_set>
using namespace std;
// 自定义结构体
struct Student
{
string name;
int age;
string major;
};
// 重载运算符==
bool operator==(constStudent& s1, const Student& s2)
{
return s1.name == s2.name && s1.age == s2.age && s1.major == s2.major;
}
// 定义哈希函数
namespace std {
template <>
struct hash<Student>
{
size_t operator()(const Student& s) const
{
size_t h1 = hash<string>{}(s.name);
size_t h2 = hash<int>{}(s.age);
size_t h3 = hash<string>{}(s.major);
return h1 ^ ((h2 ^ (h3 << 1)) << 1);
}
};
}
int main()
{
// 创建一个unordered_set容器,存储自定义结构体
unordered_set<Student> mySet;
// 插入元素
mySet.insert(Student{"张三", 18, "计算机科学"});
mySet.insert(Student{"李四", 19, "软件工程"});
mySet.insert(Student{"王五", 20, "信息安全"});
// 遍历元素
unordered_set<Student>::iterator it;
for(it = mySet.begin(); it != mySet.end(); it++)
{
cout << "姓名:" << it->name << ",年龄:" << it->age << ",专业:" << it->major << endl;
}
return 0;
}
在这个示例中,我们定义了一个名为Student的结构体,并重载了运算符。然后我们又定义了一个哈希函数,用于将Student类型的对象转换为哈希值。最后,我们使用unordered_set容器存储Student类型的元素,并遍历输出了这些元素。
结论
unordered_set是C++ STL中的一个关联容器,它以哈希表的形式存储数据,并具有高效的插入、查找等操作。在使用unordered_set容器时,我们经常需要遍历其中的元素,而begin()函数则是遍历元素的入口。通过begin()函数返回的迭代器,我们可以依次访问unordered_set中的每个元素。