本文中的一些重要概念摘自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; }
测试程序输出结果: