标签:算法
使用set或multiset之前,必须加入头文件<set>
Set、multiset都是集合类,差别在与set中不允许有重复元素,multiset中允许有重复元素。
sets和multiset内部以平衡二叉树实现
1. 常用函数
1) 构造函数和析构函数
set c:创建空集合,不包含任何元素
set c(op):以op为排序准则,产生一个空的set
set c1(c2):复制c2中的元素到c1中
set c(const value_type *first, const value_type* last):复制[first, last)之间元素构成新集合
set c(const value_type *first, const value_type* last,op):以op为排序准则,复制[first, last)之间元素构成新集合。
c.~set()销毁所有元素,释放内存
multiset mc:创建空集合,不包含任何元素
multiset mc(op):以op为排序准则,产生一个空的set
multiset c1(c2):复制c2中的元素到c1中
multiset c(const value_type *first, const value_type* last):复制[first, last)之间元素构成新集合
multiset c(const value_type *first, const value_type* last,op):以op为排序准则,复制[first, last)之间元素构成新集合。
c.~set()销毁所有元素,释放内存
-
-
#include <iostream>
-
#include <set>
-
-
bool fncomp (int lhs, int rhs) {return lhs<rhs;}
-
-
struct classcomp {
-
bool operator() (const int& lhs, const int& rhs) const
-
{return lhs<rhs;}
-
};
-
-
int main ()
-
{
-
std::set<int> first;
-
-
int myints[]= {10,20,30,40,50};
-
std::set<int> second (myints,myints+5);
-
-
std::set<int> third (second);
-
-
std::set<int> fourth (second.begin(), second.end());
-
-
std::set<int,classcomp> fifth;
-
-
bool(*fn_pt)(int,int) = fncomp;
-
std::set<int,bool(*)(int,int)> sixth (fn_pt);
-
-
return 0;
-
}
2) 大小、判断空函数
int size() const:返回容器元素个数
bool empty() const:判断容器是否为空,若返回true,表明容器已空
3) 增加、删除函数
pair<iterator,bool> insert( x):插入元素x
iterator insert(iterator it,x):在迭代器it处插入元素x
void insert(const value_type *first,const value_type *last):插入[first, last)之间元素
iterator erase(iterator it):删除迭代器指针it处元素
iterator erase(iterator first,iterator last):删除[first, last)之间元素
size_type erase(const Key& key):删除元素值等于key的元素
-
#include <iostream>
-
#include <set>
-
-
int main ()
-
{
-
std::set<int> myset;
-
std::set<int>::iterator it;
-
std::pair<std::set<int>::iterator,bool> ret;
-
-
-
for (int i=1; i<=5; ++i) myset.insert(i*10);
-
-
ret = myset.insert(20);
-
-
if (ret.second==false) it=ret.first;
-
-
myset.insert (it,25);
-
myset.insert (it,24);
-
myset.insert (it,26);
-
-
int myints[]= {5,10,15};
-
myset.insert (myints,myints+3);
-
-
std::cout << "myset contains:";
-
for (it=myset.begin(); it!=myset.end(); ++it)
-
std::cout << ‘ ‘ << *it;
-
std::cout << ‘\n‘;
-
-
return 0;
-
}
-
#include <iostream>
-
#include <set>
-
-
int main ()
-
{
-
std::set<int> myset;
-
std::set<int>::iterator it;
-
-
-
for (int i=1; i<10; i++) myset.insert(i*10);
-
-
it = myset.begin();
-
++it;
-
-
myset.erase (it);
-
-
myset.erase (40);
-
-
it = myset.find (60);
-
myset.erase (it, myset.end());
-
-
std::cout << "myset contains:";
-
for (it=myset.begin(); it!=myset.end(); ++it)
-
std::cout << ‘ ‘ << *it;
-
std::cout << ‘\n‘;
-
-
return 0;
-
}
4) 遍历函数
iterator begin():返回首元素的迭代器指针
iterator end():返回尾元素的迭代器指针
reverse_iterator rbegin():返回尾元素的逆向迭代器指针
reverse_iterator rend():返回首元素前一个位置的迭代器指针
-
#include <iostream>
-
#include <set>
-
-
int main ()
-
{
-
int myints[] = {75,23,65,42,13};
-
std::set<int> myset (myints,myints+5);
-
-
std::cout << "myset contains:";
-
for (std::set<int>::iterator it=myset.begin(); it!=myset.end(); ++it)
-
std::cout << ‘ ‘ << *it;
-
-
std::cout << ‘\n‘;
-
-
return 0;
-
}
5) 操作函数
const_iterator lower_bound(const Key& key):返回容器中大于等于key的迭代器指针
const_iterator upper_bound(const Key& key):返回容器中大于key的迭代器指针
int count(const Key& key) const:返回容器中元素等于key的元素的个数
pair<const_iterator,const_iterator> equal_range(const Key& key) const:返回容器中元素值等于key的迭代指针[first, last)
const_iterator find(const Key& key) const:查找功能,返回元素值等于key的迭代器指针
void swap(set& s):交换集合元素
void swap(multiset& s):交换多集合元素
-
#include <iostream>
-
#include <set>
-
-
int main ()
-
{
-
std::set<int> myset;
-
std::set<int>::iterator itlow,itup;
-
-
for (int i=1; i<10; i++) myset.insert(i*10);
-
-
itlow=myset.lower_bound (30);
-
itup=myset.upper_bound (60);
-
-
myset.erase(itlow,itup);
-
-
std::cout << "myset contains:";
-
for (std::set<int>::iterator it=myset.begin(); it!=myset.end(); ++it)
-
std::cout << ‘ ‘ << *it;
-
std::cout << ‘\n‘;
-
-
return 0;
-
}
-
#include "stdafx.h"
-
#include <iostream>
-
#include <set>
-
-
using namespace std;
-
-
int main ()
-
{
-
set<int> myset;
-
-
for (int i=1; i<=5; i++) myset.insert(i*10);
-
-
pair<set<int>::const_iterator,set<int>::const_iterator> ret;
-
ret = myset.equal_range(30);
-
-
cout << "the lower bound points to: " << *ret.first << ‘\n‘;
-
cout << "the upper bound points to: " << *ret.second << ‘\n‘;
-
-
return 0;
-
}
-
#include "stdafx.h"
-
#include <iostream>
-
#include <set>
-
-
using namespace std;
-
-
int main ()
-
{
-
int myints[]={12,75,10,32,20,25};
-
set<int> first (myints,myints+3);
-
set<int> second (myints+3,myints+6);
-
-
first.swap(second);
-
-
cout << "first contains:";
-
for (set<int>::iterator it=first.begin(); it!=first.end(); ++it)
-
cout << ‘ ‘ << *it;
-
cout << ‘\n‘;
-
-
cout << "second contains:";
-
for (set<int>::iterator it=second.begin(); it!=second.end(); ++it)
-
cout << ‘ ‘ << *it;
-
cout << ‘\n‘;
-
-
return 0;
-
}
stl 之set图解,布布扣,bubuko.com
stl 之set图解
标签:算法
原文地址:http://blog.csdn.net/chaoyueziji123/article/details/38422629