码迷,mamicode.com
首页 > 其他好文 > 详细

【stl学习笔记】set、multiset

时间:2014-07-27 21:58:09      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:

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

 

【stl学习笔记】set、multiset

标签:

原文地址:http://www.cnblogs.com/ljygoodgoodstudydaydayup/p/3871313.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!