C++ STL容器详解之set/multiset

其实我已经在STL概述中举了个使用set的小例子,接下来我将系统地整理一下set的用法。

标题叫“详解之set/multiset”,multiset又是什么,其实和set唯一的区别就在于set没有重复的元素,而multiset可以有重复元素,所以接下来我就只介绍set,multiset同理。

set:集合,和数学上的集合是一样的。它能够顺序存储一组值。并且自动以升序的顺序存储。

-set的定义:

set < T > s;
set中的元素可以是任意型别T,比如int,double,string等等

set  s1; 
set  s2;

-set的容量、统计、搜索

容量:size() ;判断是否为空:empty()
统计:count(key);统计键值为key的元素个数
搜索:find(key);返回键值为key的元素位置,返回值为迭代器类型。

这些方法的使用和vector一样,可以参考我总结的vector文章
地址是:http://blog.csdn.net/karry_zzj/article/details/68954252


-set的迭代器相关函数和赋值函数

和vector基本类似
赋值操作:“=”,swap(),赋值两端set必须是相同类型
迭代器函数:begin(),end() , rbegin() , rend()
而因为set的特殊性,无法对set元素调用任何变动性算法。

/*“=”与swap用法举例*/
#include
#include
#include
using namespace std;
int main()
{
    set<int>s1;
    s1.insert(1); s1.insert(2);
    set<int>::iterator it;
    for(it = s1.begin(); it != s1.end(); it++)
        cout<<*it<<" ";//输出为1 2
    cout<set<int>s2;
    s2 = s1;//"="赋值语句
    for(it = s2.begin(); it != s2.end(); it++)
        cout<<*it<<" ";//输出为1 2
    cout<set<int>s3;
    s3.insert(3); s3.insert(2);
    for(it = s3.begin(); it != s3.end(); it++)
        cout<<*it<<" ";//输出为2 3
    cout<//将s3与s2交换
    for(it = s2.begin(); it != s2.end(); it++)
        cout<<*it<<" ";//输出为2 3
    return 0;
}

-set的插入和删除

insert() , erase() , clear()
erase()可以删除一个由迭代器指定的元素,也可以删除一个范围内的元素。

#include 
#include
#include
using namespace std;
int main()
{
    set<int> s;
    s.insert(1); s.insert(2); s.insert(3);
    set<int>::iterator it;
    for(it = s.begin(); it != s.end(); it++)
        cout<<*it<<" ";//输出1 2 3
    cout<for(it = s.begin(); it != s.end(); it++)
        cout<<*it<<" ";//输出1 3,删除了除首元素和尾元素的所有元素
    cout<return 0;
}

其实这些都和vector的用法基本相同。其他的不再多说


-set的比较运算符

key_comp()用于键值比较 , value_comp()用于实值比较
这个不大用到,但是还是说明一下吧
key_comp()的返回值是key_compare类型,key_compare决定集合中元素的排列顺序,也就是通过对返回值的测试,可以确定排序形式。
怎么排序是自己定的,自己都知道了还要测试干啥,就是没啥用。就不贴代码了。


基本的用法就是这些,和vector有很多是一样用法的。

你可能感兴趣的:(STL)