您的位置:首页 > 其它

【stl学习笔记】set、multiset

2014-07-27 13:57 274 查看
set和multiset会根据特定的排序准则,自动将元素排序。两者不同处在于multiset允许元素重复而set不允许

在使用set或multiset之前,必须先加入头文件<set>

set和multiset通常以红黑树完成,红黑树在改变元素数量和元素搜寻方面很出色,它保证结点安插时最多只会作两个重新连接动作,而且到达某一元素的最长路径深度最多只是最短路径深度的两倍。

自动排序造成set和multiset的一个重要限制:不能直接改变元素值,这样会打乱原本正确的顺序。因此,要改变元素值,必须先删除旧元素,再插入新元素。

有两种方式可以定义排序准则:

1.以template参数定义

2.以构造函数参数定义

set和multiset的搜寻操作函数:

count(elem) 返回元素值为elem的元素个数

find(elem) 返回元素值为elem的第一个元素,如果找不到就返回end()

lower_bound(elem) 返回elem的第一个可安插位置,也就是元素值>=elem的第一个元素位置

upper_bound(elem) 返回elem的最后一个可安插位置,也就是元素值>elem的第一个元素位置

equal_range(elem) 返回elem可安插的第一个位置和最后一个位置,也就是元素值==elem的元素区间

int main()
{
set<int>c;

c.insert(1);
c.insert(2);
c.insert(3);
c.insert(4);
c.insert(5);
c.insert(6);

cout << *c.lower_bound(3) << endl;
cout << *c.upper_bound(3) << endl;
cout << *c.equal_range(3).first << " " << *c.equal_range(3).second << endl;

}


输出:3 4 3 4
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: