python set去重时间复杂度_set练习(示例代码)

本文详细介绍了C++ STL中的set容器,包括如何定义set、通过迭代器访问元素、常用函数如insert、find、erase等的操作,以及size、clear等函数的使用。示例代码展示了set的基本操作,强调了set中元素的唯一性和自动排序特性,并提及了multiset和unordered_set在特定场景下的使用。
摘要由CSDN通过智能技术生成

#include#include

using namespacestd;//定义set:set name;(如果typename是一个STL容器, 定义时要记得在>>符号前加上空格

setname;setname;setname;set name; //node是结构体的类型//set数组的定义:set Arrayname[arraySize];

set a[100];//set容器内元素访问 **set只能通过迭代器(iterator)访问**:set::iterator it;

set::iterator it;set::iterator it;//使用*it来访问set中的元素, **除了vector和string之外的STL容器都不支持*(it + i)的访问方式**

#include#include

using namespacestd;intmain() {setst;

st.insert(3);

st.insert(5);

st.insert(2);

st.insert(3);//**不支持用it < st.end()的写法

for (set::iterator it = st.begin(); it != st.end(); it++) {

printf("%d", *it);

}return 0;

}//set常用函数//insert(x):将x插入set容器中, 并自动递增排序和去重, 时间复杂度为O(longN), 其中N为set内元素的个数//find(value):返回set中对应值为value的迭代器, 时间复杂度为O(logN),N为set内的元素个数

#include#include

using namespacestd;intmain() {setst;for (int i = 1; i <= 3; i++) {

st.insert(i);

}set::iterator it = st.find(2); //在set中寻找2, 返回其迭代器

printf("%d", *it); //或写成 printf("%d

", *st.find(2));

return 0;

}//erase():删除单个元素、删除一个区间内所有元素//删除单个元素:st.erase(it), it为所需要删除的元素的迭代器, 时间复杂度为O(1),可以结合find()函数使用

#include#include

using namespacestd;intmain() {setst;

st.insert(100);

st.insert(200);

st.insert(100);

st.insert(300);

st.erase(st.find(100));

st.erase(st.find(200));for (set::iterator it = st.begin(); it != st.end(); it++) {

printf("%d", *it);

}return 0;

}//删除单个元素:st.erase(value), value为所需删除元素的值。 时间复杂度为O(logN), N为set内的元素个数

#include#include

using namespacestd;intmain() {setst;

st.insert(100);

st.insert(200);

st.erase(100);for (set::iterator it = st.begin(); it != st.end(); it++) {

printf("%d", *it);

}return 0;

}//删除一个区间内的所有元素:st.erase(first, last)可以删除一个区间内的所有元素, first为所需要删除区间的起始迭代器, 而last为所需要删除区间的末尾迭代器的下一个地址, 删除[first, last), 时间复杂度为O(last-first)。

#include#include

using namespacestd;intmain() {setst;

st.insert(20);

st.insert(10);

st.insert(40);

st.insert(30);set::iterator it = st.find(30);

st.erase(it, st.end());for (it = st.begin(); it != st.end(); it++) {

printf("%d", *it);

}return 0;

}//size():用来获得set内元素的个数, 时间复杂度为O(1)

#include#include

using namespacestd;intmain() {setst;

st.insert(2);

st.insert(5);

st.insert(4);

printf("%d", st.size());return 0;

}//clear():清空set中所有的元素, 复杂度为O(N), 其中N为set内元素的个数

#include#include

using namespacestd;intmain() {setst;

st.insert(2);

st.insert(5);

st.insert(4);

st.clear();

printf("%d", st.size());return 0;

}//反向迭代器

#include#include

using namespacestd;intmain() {setst;for (int i = 0; i < 8; i++) {

st.insert(i);

}set::reverse_iterator rit; //定义反向迭代器

for (rit = st.rbegin(); rit != st.rend(); rit++) {

printf("%d", *rit);

}

}//set中元素是唯一的, 如果需要处理不唯一的情况, 需要使用multiset//C++11标准中添加了unordered_set, 以散列代替set内部的红黑树实现, 使其可以用来处理只去重但是不排序的需求, 速度比set快很多

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值