C++中的set erase操作详解及使用技巧

一、erase操作的基本用法

std::set是C++标准库中的一个容器,它是一个有序集合,其中每个元素都唯一。当我们在set中插入元素时,会自动按照一定的规则将元素插入到正确的位置,其中插入了重复的元素会被忽略。erase操作是set中用于删除元素的方法,其基本用法如下:

std::set<int> my_set;
// 添加一些元素
my_set.insert(1);
my_set.insert(2);
my_set.insert(3);
// 删除元素
my_set.erase(2);

上面的代码中,我们首先创建了一个空的set,然后添加了3个元素1、2、3。最后通过erase操作删除2这个元素。需要注意的是,当我们调用erase方法时,它会返回删除的元素的数量,因为在一些情况下,set中并不一定存在要删除的元素。

二、删除set中重复的元素

std::set是一个不允许有重复元素的集合,如果我们需要去除set中的重复元素,可以使用erase方法和unique算法来实现。例如,我们有一个包含重复元素的vector:

std::vector<int> vec {1, 2, 2, 3, 3, 3, 4, 4, 4, 4};
std::set<int> s(vec.begin(), vec.end());

可以使用以下代码删除重复元素:

vec.erase(std::unique(vec.begin(), vec.end()), vec.end());

unique方法可以将序列中的相邻重复元素删除,返回一个指向新序列结尾的迭代器,然后我们将这个迭代器作为参数传递给erase方法即可。需要注意的是,unique方法只能用于有序容器。

三、使用自定义类型删除set元素

std::set默认使用元素类型的比较运算符来比较元素大小,如果我们使用自定义类型,需要重载操作符。例如,我们有一个自定义类型Person:

struct Person {
    std::string name;
    int age;
    bool operator<(const Person& other) const {
        return name < other.name;
    }
};

以上代码中,我们定义了一个Person结构体,包含姓名和年龄两个成员变量。重载了小于操作符,使得set能够根据姓名按照字典序排序。现在我们创建一个Person对象的set:

std::set<Person> s;
s.insert(Person{"Alice", 20});
s.insert(Person{"Bob", 21});
s.insert(Person{"Charlie", 22});

现在我们可以使用erase方法删除set中的Person对象了:

s.erase(Person{"Bob", 21});

需要注意的是,我们必须重载小于操作符,才能够使用默认的set的比较运算符。同时,为了保证set的正确性,我们需要满足严格弱序关系,即如果a < b,则b不能小于a。

四、使用erase方法删除set中满足特定条件的元素

除了使用erase方法删除特定的元素,我们还可以使用std::set的一些方法来删除满足特定条件的元素。例如,我们有以下一个set:

std::set<int> s {1, 2, 3, 4, 5};

我们可以使用std::set的find和lower_bound方法来查找set中满足特定条件的元素。例如,我们想要删除set中所有大于等于3的元素:

auto iter = s.lower_bound(3);
s.erase(iter, s.end());

上面的代码中,lower_bound方法可以查找第一个大于等于给定值的元素的迭代器。然后我们将这个迭代器作为参数传递给erase方法删除这些元素。

五、小结

在C++中,std::set是一个有用的容器,可以自动按照一定规则排序,并且保证元素唯一。erase方法是set中用于删除元素的方法,可以删除指定的元素和满足特定条件的元素。我们还可以使用unique算法来删除set中的重复元素。如果我们使用自定义类型,需要重载小于操作符,并满足严格弱序关系。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/297151.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-28 12:15
下一篇 2024-12-28 12:15

相关推荐

  • Python栈操作用法介绍

    如果你是一位Python开发工程师,那么你必须掌握Python中的栈操作。在Python中,栈是一个容器,提供后进先出(LIFO)的原则。这篇文章将通过多个方面详细地阐述Pytho…

    编程 2025-04-29
  • Python中set函数的作用

    Python中set函数是一个有用的数据类型,可以被用于许多编程场景中。在这篇文章中,我们将学习Python中set函数的多个方面,从而深入了解这个函数在Python中的用途。 一…

    编程 2025-04-29
  • Python操作数组

    本文将从多个方面详细介绍如何使用Python操作5个数组成的列表。 一、数组的定义 数组是一种用于存储相同类型数据的数据结构。Python中的数组是通过列表来实现的,列表中可以存放…

    编程 2025-04-29
  • Python Set元素用法介绍

    Set是Python编程语言中拥有一系列独特属性及特点的数据类型之一。它可以存储无序且唯一的数据元素,这使得Set在数据处理中非常有用。Set能够进行交、并、差集等操作,也可以用于…

    编程 2025-04-29
  • Python操作MySQL

    本文将从以下几个方面对Python操作MySQL进行详细阐述: 一、连接MySQL数据库 在使用Python操作MySQL之前,我们需要先连接MySQL数据库。在Python中,我…

    编程 2025-04-29
  • Python代码实现回文数最少操作次数

    本文将介绍如何使用Python解决一道经典的回文数问题:给定一个数n,按照一定规则对它进行若干次操作,使得n成为回文数,求最少的操作次数。 一、问题分析 首先,我们需要了解回文数的…

    编程 2025-04-29
  • Python磁盘操作全方位解析

    本篇文章将从多个方面对Python磁盘操作进行详细阐述,包括文件读写、文件夹创建、删除、文件搜索与遍历、文件重命名、移动、复制、文件权限修改等常用操作。 一、文件读写操作 文件读写…

    编程 2025-04-29
  • Python元祖操作用法介绍

    本文将从多个方面对Python元祖的操作进行详细阐述。包括:元祖定义及初始化、元祖遍历、元祖切片、元祖合并及比较、元祖解包等内容。 一、元祖定义及初始化 元祖在Python中属于序…

    编程 2025-04-29
  • Python列表的读写操作

    本文将针对Python列表的读取与写入操作进行详细的阐述,包括列表的基本操作、列表的增删改查、列表切片、列表排序、列表反转、列表拼接、列表复制等操作。 一、列表的基本操作 列表是P…

    编程 2025-04-29
  • 如何用Python对数据进行离散化操作

    数据离散化是指将连续的数据转化为离散的数据,一般是用于数据挖掘和数据分析中,可以帮助我们更好的理解数据,从而更好地进行决策和分析。Python作为一种高效的编程语言,在数据处理和分…

    编程 2025-04-29

发表回复

登录后才能评论