• STL 关联容器之集合和多重集合


    目录



    头文件:

    #include <set>

    集合和多重集合的唯一区别:多重集合可以包含重复元素,集合不可以包含重复元素。


    构造方法

    1. ctType<type> ct                                       创建空集合 <
    2. ctType<type,sort> ct                               创建自定义排序方式的空集合
    3. ctType<type> ct(otherCt)                       用另外的集合 创建集合 <
    4. ctType<type,sort> ct(otherCt)               用另外的集合创建自定义排序方式的集合
    5. ctType<type> ct(beg,end)                     用另外的集合 创建集合 < ,从beg 到end + 1
    6. ctType<type,sort> ct(beg,end)             用另外的集合创建自定义排序方式的集合,从beg 到end + 1

    示例:

    	set<int> intSet;
    	set<int,greater<int> > otherIntSet;
    	multiset<string> stringMultiSet;
    	multiset<string, greater<string> > otherStringMultiset;


    操作:

    1. ct.insert(elem)                                     插入元素,返回是否成功
    2. ct.insert(pos,elem)                             从某个位置开始搜索插入,返回插入的位置
    3. ct.insert(beg,end)                               将beg到end-1的所有元素插入到ct中
    4. ct.erase(elem)                                    删除元素,返回删除的个数
    5. ct.erase(pos)                                      删除指定位置上的元素,不返回任何值
    6. ct.erase(beg,end)                              删除一段位置的值,不返回任何值
    7. ct.clear()                                              清空集合

    示例代码:

    #include <list>
    #include <iostream>
    #include <algorithm>
    #include <iterator>
    #include <set>
    #include <string>
    
    using namespace std;
    
    int main() {
    	set<int> intSet; // 集合 升序
    	set<int,greater<int> > intSetA;// 集合 降序
    	set<int,greater<int> >::iterator intSetAIt;// 迭代器
    	ostream_iterator<int> screen(cout," ");// 输出迭代器
    
    	// intSet 添加元素
    	intSet.insert(16);
    	intSet.insert(8);
    	intSet.insert(20);
    	intSet.insert(3);
    	cout << "intSet :" << endl;
    	copy(intSet.begin(),intSet.end(),screen);
    	cout<< endl;
    	// intSetA 添加元素
    	intSetA.insert(36);
    	intSetA.insert(84);
    	intSetA.insert(30);
    	intSetA.insert(39);
    	intSetA.insert(59);
    	intSetA.insert(238);
    	intSetA.insert(156);
    	intSetA.insert(156); //重复插入
    	cout << "intSetA :" << endl;
    	copy(intSetA.begin(),intSetA.end(),screen);
    	cout << endl;
    
    	// 擦除元素
    	intSetAIt = intSetA.begin();
    	++intSetAIt;
    	++intSetAIt;
    	++intSetAIt;
    	intSetA.erase(intSetAIt);
    
    	cout << "intSetA.erase:" << endl;
    	copy(intSetA.begin(),intSetA.end(),screen);
    	cout << endl;
    
    	set<int,greater<int> >intSetB(intSetA);
    	cout << "intSetB :" << endl;
    	copy(intSetB.begin(),intSetB.end(),screen);
    	cout << endl;
    
    	intSetB.clear();
    	cout << "intSetB.clear :" << endl;
    	copy(intSetB.begin(),intSetB.end(),screen);
    	cout << endl;
    
    	// 定义多重集合
    	multiset<string, greater<string> > namesMultiSet;
    	multiset<string, greater<string> >::iterator iter;
    	ostream_iterator<string> pScreen(cout," ");
    
    	namesMultiSet.insert("Donny");
    	namesMultiSet.insert("Zippy");
    	namesMultiSet.insert("Goofy");
    	namesMultiSet.insert("Hungry");
    	namesMultiSet.insert("Goofy");
    	namesMultiSet.insert("Donny");
    
    	cout << "namesMultiSet:" << endl;
    	copy(namesMultiSet.begin(),namesMultiSet.end(),pScreen);
    	cout <<endl;
    	
    
    	return 0;
    }
    

    运行结果:

    intSet :
    3 8 16 20
    intSetA :
    238 156 84 59 39 36 30
    intSetA.erase:
    238 156 84 39 36 30
    intSetB :
    238 156 84 39 36 30
    intSetB.clear :


    namesMultiSet:
    Zippy Hungry Goofy Goofy Donny Donny


  • 相关阅读:
    Vue实现上下整屏滚动效果
    Vue实现选项卡切换效果
    Vue中在main.js中引入字体图标问题
    Vue中的生命周期beforeDestory不触发问题
    Vue中解决移动端点击300毫秒延迟的问题
    Vue中全局和按需引入Echarts
    Vue组件间的通信
    Echarts图表属性设置
    JZOJ 6799. 【2014广州市选day2】game
    JZOJ 6798. 【2014广州市选day2】regions
  • 原文地址:https://www.cnblogs.com/wjchang/p/3671649.html
Copyright © 2020-2023  润新知