C++ STL中的unordered_set begin()函数

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,创建了一个名为mySet的集合,然后向其中插入了几个元素,重复的元素只会被插入一次。在输出集合中的元素后,我们删除了4这个元素,并再次输出集合中的元素。

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中的每个元素。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

C++ 教程