STL标准库(四) 关联容器-set关联器

时间:2024-01-27 22:01:50

set 集合 基于平衡二叉树(红黑树)存储,元素值唯一且有序

multiset 多重集合 基于平衡二叉树(红黑树)存储,元素值可以重复

unordered_set 无序集合 基于哈希表 无序的,但是元素值唯一,使用时需要包含头文件

<unordered_set>

以上三个功能基本一致,只是内部实现有所不同

unordered_multiset 多重无序集合

如下一个程序演示set关联容器

#include <set> 需要包含该头文件

template <typename T>

void print(T Begin, T end)

{

    for (T i = Begin; i != end; ++i)

    {

       std::cout << *i << std::endl;

    }

    std::cout << std::endl;

}

int main()

{

    std::set<int> obj = {5,6444,54,84,452}; 创建一个set容器,元素在插入该容器时自动排列

    for (auto i = obj.begin(); i != obj.end(); i++) 遍历该容器

    {

        std::cout << *i << std::endl; 打印元素值

    }

结果发现,从小到大打印,证明容器元素是有序的

    std::set<int> objB(obj.begin(), obj.end()); 迭代器方式拷贝构造

元素从obj容器的开始到结尾全部拷贝

    objB.erase(84); 删除该容器中84的值

    objB.erase(objB.begin());删除某个迭代器指向的位置

    objB.erase(objB.begin(), objB.end()); 删除某个迭代器指向的位置到另一个迭代器指向的位置

    objB.insert(999); 插入999

    if (objB.insert(999).second)   second用来判断插入元素后,该元素在容器中个数,如果为1则返

回ture,如果为2则返回false

    {

       std::cout << "insert success" << std::endl;

    }

    else

    {

       std::cout << "insert failed" << std::endl;

    }

    if (objB.find(12) != objB.end())  遍历查找元素,如果返回false意味着容器元素都查找了一遍,没

有找到要查找的元素,查找失败

    {

       std::cout << "find success" << std::endl;

    }

    else

    {

       std::cout << "find failed" << std::endl;

    }

    for (auto i = objB.rbegin(); i != objB.rend(); i++)   反向遍历

    {

       std::cout << *i << std::endl;

    }

    print(objB.begin(),objB.end()); 可以应用模板函数遍历

    system("pause");

    return 0;

}