码迷,mamicode.com
首页 > 其他好文 > 详细

set练习

时间:2018-06-22 01:05:17      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:结合   node   元素访问   i++   删除元素   bsp   include   tor   TE   

set—内部自动有序且不含重复元素的容器

#include<stdio.h>
#include<set>
using namespace std;

//定义set:set<typename> name;(如果typename是一个STL容器, 定义时要记得在>>符号前加上空格
set<int> name;
set<double> name;
set<char> name;
set<node> name;  //node是结构体的类型

//set数组的定义:set<typename> Arrayname[arraySize];
set<int> a[100];

//set容器内元素访问  **set只能通过迭代器(iterator)访问**:set<typename>::iterator it;
set<int>::iterator it;
set<char>::iterator it;
//使用*it来访问set中的元素, **除了vector和string之外的STL容器都不支持*(it + i)的访问方式**
#include<stdio.h>
#include<set>
using namespace std;
int main() {
    set<int> st;
    st.insert(3);
    st.insert(5);
    st.insert(2);
    st.insert(3);
    //**不支持用it < st.end()的写法
    for (set<int>::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<stdio.h>
#include<set>
using namespace std;
int main() {
    set<int> st;
    for (int i = 1; i <= 3; i++) {
        st.insert(i);
    }
    set<int>::iterator it = st.find(2);  //在set中寻找2, 返回其迭代器
    printf("%d\n", *it);  //或写成 printf("%d\n", *st.find(2));
    return 0;
}

//erase():删除单个元素、删除一个区间内所有元素
//删除单个元素:st.erase(it), it为所需要删除的元素的迭代器, 时间复杂度为O(1),可以结合find()函数使用
#include<stdio.h>
#include<set>
using namespace std;
int main() {
    set<int> st;
    st.insert(100);
    st.insert(200);
    st.insert(100);
    st.insert(300);
    st.erase(st.find(100));
    st.erase(st.find(200));
    for (set<int>::iterator it = st.begin(); it != st.end(); it++) {
        printf("%d\n", *it);
    }
    return 0;
}
//删除单个元素:st.erase(value), value为所需删除元素的值。 时间复杂度为O(logN), N为set内的元素个数
#include<stdio.h>
#include<set>
using namespace std;
int main() {
    set<int> st;
    st.insert(100);
    st.insert(200);
    st.erase(100);
    for (set<int>::iterator it = st.begin(); it != st.end(); it++) {
        printf("%d\n", *it);
    }
    return 0;
}
//删除一个区间内的所有元素:st.erase(first, last)可以删除一个区间内的所有元素, first为所需要删除区间的起始迭代器, 而last为所需要删除区间的末尾迭代器的下一个地址, 删除[first, last), 时间复杂度为O(last-first)。
#include<stdio.h>
#include<set>
using namespace std;
int main() {
    set<int> st;
    st.insert(20);
    st.insert(10);
    st.insert(40);
    st.insert(30);
    set<int>::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<stdio.h>
#include<set>
using namespace std;
int main() {
    set<int> st;
    st.insert(2);
    st.insert(5);
    st.insert(4);
    printf("%d\n", st.size());
    return 0;
}

//clear():清空set中所有的元素, 复杂度为O(N), 其中N为set内元素的个数
#include<stdio.h>
#include<set>
using namespace std;
int main() {
    set<int> st;
    st.insert(2);
    st.insert(5);
    st.insert(4);
    st.clear();
    printf("%d\n", st.size());
    return 0;
}
//反向迭代器
#include<stdio.h>
#include<set>
using namespace std;
int main() {
    set<int> st;
    for (int i = 0; i < 8; i++) {
        st.insert(i);
    }
    set<int>::reverse_iterator rit;  //定义反向迭代器
    for (rit = st.rbegin(); rit != st.rend(); rit++) {
        printf("%d ", *rit);
    }
}

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

 

set练习

标签:结合   node   元素访问   i++   删除元素   bsp   include   tor   TE   

原文地址:https://www.cnblogs.com/Yaxadu/p/9211414.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!