Sets are typically implemented as binary search trees.set容器和multiset容器是实现了红黑树(Red-Black Tree)的平衡二叉搜索树的数据结构,set和multiset唯一不同的是multiset允许插入相同的元素。

template < class T,                        // set::key_type/value_type
           class Compare = less<T>,        // set::key_compare/value_compare
           class Alloc = allocator<T>      // set::allocator_type
           > class set

find()(查找元素)

iterator find(const key_type& __x)
//查找__x,若找到返回其迭代器,若未找到返回end();

const_iterator find(const key_type& __x) const
//大致同上
     

count()(计数元素)

size_type count(const key_type& __x) const
//返回__x在容器中出现的次数,set中值是唯一的故只能返回0或1,而multiset可以返回大于1的数

 

insert()(插入元素)

std::pair<iterator, bool> insert(const value_type& __x)
//插入元素__x,返回一个pair,pair的第一个元素为指向该元素的迭代器,若插入成功则pair的第二个元素为true,否则为false

std::pair<iterator, bool> insert(value_type&& __x)
//大致同上,其中&&为右值引用

iterator insert(const_iterator __position, const value_type& __x)
//从__position指向处开始插入元素__x,虽然最终结果都一样,但会影响插入的效率,返回值为该元素的迭代器

iterator insert(const_iterator __position, value_type&& __x)
//大致同上,其中&&为右值引用

template<typename _InputIterator>
    void insert(_InputIterator __first, _InputIterator __last)
//插入__first和__last间的元素

void insert(initializer_list<value_type> __l)
//initializer_list是C++11提供的新类型,用于表示某种特定类型的值的数组,和set一样,initializer_list也是一种模板类型

//CSDN博客:https://blog.csdn.net/qq_40889820
#include<iostream>
#include<set>
using namespace std;
int main()
{
	set<int> s;
	set<int>::iterator it;
	pair< set<int>::iterator,bool > pa;
	s.insert(1);
	s.insert(5);
	s.insert(4);
	s.insert(9);
	for(it=s.begin();it!=s.end();it++)
		cout<<*it<<" ";cout<<endl;
	pa=s.insert(4);//原先set已存在元素4,故pa的第二个值为false 
	if(!pa.second) it=pa.first;//it指向4
	s.insert(it,10);
	int a[4]={7,11,45,12};
	s.insert(a,a+4);//插入a数组元素 
	for(it=s.begin();it!=s.end();it++)
		cout<<*it<<" ";	
}


     
    

erase()(删除元素)

 iterator erase(const_iterator __position)
//删除__position指向的元素,返回值为删掉值的后面一个值的迭代器,若被删掉的最后一个值原本是容器中的最后一个值返回end()

void erase(iterator __position)
//大致同上,空类型

size_type erase(const key_type& __x)
//删除值__x,返回值为删除__x的个数

iterator erase(const_iterator __first, const_iterator __last)
//删除__first和__last间的值,返回值为删掉的最后一个值的后面一个值的迭代器,若被删掉的最后一个值原本是容器中的最后一个值返回end()

//CSDN博客:https://blog.csdn.net/qq_40889820
#include<iostream>
#include<set>
using namespace std;
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	set<int> s;
	int a[5]={1,8,4,7,5};
	s.insert(a,a+5);
	cout<<*s.begin()<<endl;//输出1 
	cout<<*s.erase(s.begin())<<endl;//输出4 
	cout<<s.erase(1);//输出0 
        cout<<*s.erase(s.find(7),s.end());//输出2,返回的是s.end(),输出的是元素个数
}

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐