C++中 set 基本方法

set 集合

常用方法:

方法功能
insert插入一个元素

erase

删除一个元素
count判断元素是否在set中
size获取元素大小
clear清空


set具有和数学中“集合”类似的属性,set由不重复的数据组成,插入、查找、删除、和查询的时间复杂度都为O(lgn).而数组虽然插入的时间复杂度为O(1),但删除、查询都为O(n),时间效率低。

初始化一个集合

C++中直接构造一个set的语句为:

set<T> s;//定义一个存储T类型、名为s的集合,初始时s为空

插入元素

#include <set>
#include<string>
#include<iostream>
using namespace std;
int main() {
    set<string> fruits;
    fruits.insert("apple");
    fruits.insert("apple");
    fruits.insert("banana");
    fruits.insert("mango");
    for(set<string>::iterator it = fruits.begin();
     it != fruits.end(); it++){
        cout << *it << endl;
    }
    return 0;
}

注意到上边的代码里有两个fruits.insert("apple");那么此时集合里的元素都有什么呢?

C++用insert()方法向集合中插入一个新的元素.如果集合中已经存在了这个元素,再次插入不会产生任何效果,集合中不会出现重复元素

删除元素

#include <set>
#include<string>
#include<iostream>
using namespace std;
int main() {
    set<string> fruits;
    fruits.insert("apple");
    fruits.insert("banana");
    fruits.insert("mango");
    fruits.erase("apple");
    fruits.erase("banana");
    fruits.erase("orange");
    for(set<string>::iterator it = fruits.begin();
     it != fruits.end(); it++){
        cout << *it << endl;
    }
    return 0;
}

c++中通过erase()方法删除集合中一个元素,如果集合中不存在这个元素,则不进行任何操作

查找元素

#include <set>
#include<string>
#include<iostream>
using namespace std;
int main() {
    set<string> fruits;
    fruits.insert("apple");
    fruits.insert("banana");
    fruits.insert("mango");
    if(fruits.count("apple")){
        cout << "We have apple!" << endl;
    }
    return 0;
}

count()方法可以查找一个元素是否在集合中,如果存在返回 1,否则返回 0

遍历元素

#include <set>
#include<string>
#include<iostream>
using namespace std;
int main() {
    set<string> fruits;
    fruits.insert("apple");
    fruits.insert("banana");
    fruits.insert("mango");
    for(set<string>::iterator it = fruits.begin();
     it != fruits.end(); it++){
        cout << *it << endl;
    }
    return 0;
}

通过迭代器可以访问集合中每一个元素,C++标准库容器都可以使用迭代器,但是其中只有少数几种支持下标运算符,如果你还不太理解迭代器,那就把它想成指针吧

清空

C++中只需要调用clear()方法就可以清空set

fruits.clear();

注意用clear()清空set并不会释放其再计算机中开辟的内存,如果想释放set的内存,把一个空set赋给它就好了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值