📜  C++ STL中的unordered_set delete()函数(1)

📅  最后修改于: 2023-12-03 14:59:47.027000             🧑  作者: Mango

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

前言

unordered_set是C++ STL中的一个数据容器,它的内部实现是使用哈希表存储数据。unordered_set提供了多种操作函数,其中包括delete()函数,这个函数可以用来删除unordered_set中的指定元素。

delete()函数的说明

语法:unordered_set::erase(key_type)unordered_set::erase(iterator pos)unordered_set::erase(iterator first, iterator last)

delete()函数的作用是将unordered_set中的指定元素删除。它提供了三种不同的参数形式来删除元素。分别是按照元素值删除、按照迭代器删除和按照区间删除。其中的参数key_type是指unordered_set中的元素类型。

  • 使用元素值删除

    unordered_set<int> s;
    s.insert(1);
    s.insert(2);
    s.insert(3);
    s.erase(2); // 删除值为2的元素
    
  • 使用迭代器删除

    unordered_set<int> s;
    s.insert(1);
    s.insert(2);
    s.insert(3);
    unordered_set<int>::iterator it = s.find(2); // 查找值为2的元素的迭代器
    s.erase(it); // 删除迭代器指定的元素
    
  • 使用区间删除

    unordered_set<int> s;
    s.insert(1);
    s.insert(2);
    s.insert(3);
    unordered_set<int>::iterator it1 = s.find(1); // 查找值为1的元素的迭代器
    unordered_set<int>::iterator it2 = s.find(3); // 查找值为3的元素的迭代器
    s.erase(it1, it2); // 删除迭代器之间的元素(不包括it2指向的元素)
    
delete()函数的返回值

delete()函数的返回值是一个size_type类型,表示删除的元素个数。

  • 当删除单个元素时,返回值为0或1。
  • 当删除多个元素时,返回值为删除的元素个数。
示例代码

下面是一个完整的使用delete()函数的示例代码:

#include <iostream>
#include <unordered_set>

using namespace std;

int main() {
    unordered_set<int> s;
    s.insert(1);
    s.insert(2);
    s.insert(3);

    cout << "s 中的元素:";
    for (auto elem : s) {
        cout << elem << " ";
    }
    cout << endl;

    size_t erased_num = s.erase(2);
    cout << "删除元素 2," << "共删除了 " << erased_num << " 个元素" << endl;

    cout << "删除元素 2 后,s 中的元素:";
    for (auto elem : s) {
        cout << elem << " ";
    }
    cout << endl;

    return 0;
}

输出结果如下:

s 中的元素:3 2 1 
删除元素 2,共删除了 1 个元素
删除元素 2 后,s 中的元素:3 1 

另外,值得一提的是,unordered_set在删除元素时并不会改变其他元素的位置,即使删除一个元素后,其他元素的位置也不会改变,哈希表会自动进行调整。