当前位置:编程学习 > 网站相关 >>

set/multiset用法详解

集合
使用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()销毁所有元素,释放内存
 
 
[cpp]  
// constructing sets  
#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;                           // empty set of ints  
  
  int myints[]= {10,20,30,40,50};  
  std::set<int> second (myints,myints+5);        // range  
  
  std::set<int> third (second);                  // a copy of second  
  
  std::set<int> fourth (second.begin(), second.end());  // iterator ctor.  
  
  std::set<int,classcomp> fifth;                 // class as Compare  
  
  bool(*fn_pt)(int,int) = fncomp;  
  std::set<int,bool(*)(int,int)> sixth (fn_pt);  // function pointer as Compare  
  
  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的元素
 
 
[cpp] 
#include <iostream>  
#include <set>  
  
int main ()  
{  
  std::set<int> myset;  
  std::set<int>::iterator it;  
  std::pair<std::set<int>::iterator,bool> ret;  
  
  // set some initial values:  
  for (int i=1; i<=5; ++i) myset.insert(i*10);    // set: 10 20 30 40 50  
  
  ret = myset.insert(20);               // no new element inserted  
  
  if (ret.second==false) it=ret.first;  // "it" now points to element 20  
  
  myset.insert (it,25);                 // max efficiency inserting  
  myset.insert (it,24);                 // max efficiency inserting  
  myset.insert (it,26);                 // no max efficiency inserting  
  
  int myints[]= {5,10,15};              // 10 already in set, not inserted  
  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;  
}  
 
[cpp]  
#include <iostream>  
#include <set>  
  
int main ()  
{  
  std::set<int> myset;  
  std::set<int>::iterator it;  
  
  // insert some values:  
  for (int i=1; i<10; i++) myset.insert(i*10);  // 10 20 30 40 50 60 70 80 90  
  
  it = myset.begin();  
  ++it;                                         // "it" points now to 20  
  
  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():返回首元素前一个位置的迭代器指针
 
     
 
[cpp]  
#include <iostream>
补充:综合编程 , 其他综合 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,