模版-set使用

来源:互联网 发布:淘宝上传图片大小限制 编辑:程序博客网 时间:2024/06/06 18:25
/*
set/multiset会根据待定的排序准则,自动将元素排序。两者不同在于前者不允许元素重复,而后者允许。
1) 不能直接改变元素值,因为那样会打乱原本正确的顺序,要改变元素值必须先删除旧元素,则插入新元素
2) 不提供直接存取元素的任何操作函数,只能通过迭代器进行间接存取,而且从迭代器角度来看,元素值是常数
3) 元素比较动作只能用于型别相同的容器(即元素和排序准则必须相同)
*/
#include <iostream>
#include <set>
using namespace std;
struct strLess
{
    bool operator() (const char *s1, const char *s2) const
    {
        return strcmp(s1, s2) < 0;
    }
};
int main()
{
    set<int>::iterator it;
    set<int> s1;//创建空的set对象,元素类型为int,
    set<char*, strLess> s2( strLess); //创建空的set对象,元素类型char*,比较函数对象(即排序准则)为自定义strLess
    set<int> s3(s1); //利用set对象s1,拷贝生成set对象s2
    int iArray[] = {13, 32, 19};
    set<int> s4(iArray, iArray + 3);//用迭代区间[&first, &last)所指的元素,创建一个set对象
    char* szArray[] = {"hello", "dog", "bird" };
    set<const char*, strLess> s5(szArray, szArray + 3, strLess() );//用迭代区间[&first, &last)所指的元素,及比较
                                                                   //函数对象strLess,创建一个set对象
    for (int i = 0; i <5 ; i++)s1.insert(i*10);//元素插入:
    //元素删除
    s1.erase(iter);//1,size_type erase(value) 移除set容器内元素值为value的所有元素,返回移除的元素个数
    it=s1.begin();
    s1.erase(it);//2,void erase(&pos) 移除pos位置上的元素,无返回值
    s4.erase(iArray, iArray + 3);//3,void erase(&first, &last) 移除迭代区间[&first, &last)内的元素,无返回值
    s1.clear();//4,移除set容器内所有元素
    //元素查找
    int num=s1.count(10);//count(value)返回set对象内元素值为value的元素个数
    it=s.find(10);//iterator find(value)返回value所在位置,找不到value将返回end()
    it=s4.begin();//set的开头
    it=s4.end();//set的最后一个的后一个,调用set最后一个的时候使用*(it-1)
}
原创粉丝点击