set 容器,又称集合容器,即该容器的底层是以红黑树变体实现的,是典型的关联式容器。这意味着,set 容器中的元素可以分散存储在内存空间里,而不是必须存储在一整块连续的内存空间中。跟任意其它类型容器一样,它能够存放各种类型的对象。
set是由多个节点(二叉树中的红黑树变体)组成的。
set 容器不能在指定位置插入,意味着不支持at(pos)和[]操作。在set中查找元素,效率是非常高的
multiset与set的区别:set中的元素值唯一,每个元素只能出现一次;而multiset中同一元素可以出现多次。
不支持随机访问迭代器,只能从容器中第一个元素或最后一个元素开始遍历容器,直到找到该位置。
iterator set.find(elem); //查找elem元素,返回指向elem元素的迭代器。
size_type set.count(elem); //返回容器中值为elem的元素个数。对set来说,要么是0,要么是1。对multiset来说,值可能大于1。
iterator set.lower_bound(elem); //返回第一个>=elem元素的迭代器。
iterator set.upper_bound(elem); // 返回第一个>elem元素的迭代器。
reverse_iterator rbegin();反向迭代器,指向最后一个元素
pair set.equal_range(elem); //返回一对迭代器,这两个迭代器分别用于指向set中大于指定元素的第一个元素,以及等于或大于指定元素的第一个元素。
equal_range返回值pair是什么?
#include
#include
using namespace std;
int main()
{
set<int> s;
for (int i = 0; i < 10; i++)
{
s.insert(rand()%20);
}
for (set<int>::iterator it = s.begin(); it != s.end(); it++)
{
cout << *it << " ";
}
cout <<"\\nset size():"<< s.size() << endl;
//输出:0 1 2 4 7 9 14 18 为什么只输出8个元素呢?
//因为set只能存在唯一的元素,重复的会被丢掉
//思考:为什么set里面的元素是有序的呢?
//因为set是关联式容器,会默认按照升序进行排列
//如果找到,返回指向的迭代器,没有找到返回end()迭代器,所以再输出之前
//需要判断是否找到
set<int>::iterator it1 = s.find(6);
if (it1 != s.end())
{
cout << *it1 << endl;
}
//如果set中有等于4的元素,则返回指向4的迭代器,如果没有返回第一个
//大于4的元素的迭代器,没有找到返回end()迭代器
it1 = s.lower_bound(4);
if (it1 != s.end())
{
cout << *it1 << endl;
}
//如果set中有大于4的元素,返回第一个大于4的元素的迭代器,没有找
//到返回end()迭代器
it1 = s.upper_bound(4);
if (it1 != s.end())
{
cout << *it1 << endl;
}
cout <<"------------------我是 C语言Plus 华丽分割线"<
全部0条评论
快来发表一下你的评论吧 !