本文中的一些重要概念摘自C语言中文网
链接:http://c.biancheng.net/view/387.html

set也是一种关联容器,也是排序好了的集合,不过,于multiset不同的是,set容器中的元素不允许相同。而multiset容器中有的成员函数,set也都有。

使用set和multiset包含的是同一个头文件set。

由于不能有重复元素,所以 set 中插入单个元素的 insert 成员函数与 multiset 中的有所不同,其原型如下:
pair<iterator, bool> insert(const T & val);

从其原型中也可以看出,它的插入成员函数的返回值是一个pair对象,其first成员是一个迭代器,second成员的类型是bool。通过这个布尔值,我们就可以知道插入是否成功,自然,成功时为true,失败时为false,插入失败说明这个元素已经在容器中存在了,此时,成员first就指向已经存在的那个元素。(有关pair类模板的介绍详见pair一节)

set的一个简单测试程序:

#include<iostream>
#include<set>

using namespace std;

template<class T>
void Print(T first, T last)
{
    for(; first != last; ++first)
    {
        cout << *first << " ";
    }
    cout << endl;
}

int main()
{
    int arr[] = {10, 12, 9, 6, 5};
    set<int> s1(arr, arr + 5);

    pair<set<int>::iterator, bool> result = s1.insert(10);

    if(result.second)
    {
        cout << "insert success!" << endl;
    }
    else
    {
        cout << "insert failed!" << endl;
        cout << "the exists elem:" << *(result.first) << endl;
    }    

    return 0;
}

测试程序输出结果:
图片说明