Set的使用
初始化
1 | set<int > seta; //默认是小于比较器less<int>的set |
特点
- set 是一个内部自动有序且不含重复元素的容器。
- set 最主要的作用就是自动去重并按升序排序,适用于需要去重但是又不方便直接开数组的情况。
- set 中的元素是唯一的,其内部采用“红黑树”实现。
基本使用

自定义排序
当
set中存储的是对象指针时,不能使用重载operator <的方式实现,因为重载时需要使用的参数是引用,而不是指针1
2
3
4
5
6
7friend bool operator < (const Food& ptr1,const Food& ptr2){
if(ptr1.rating == ptr2.rating){
return ptr1.foodName < ptr2.foodName;
}
return ptr1.rating > ptr2.rating;
}
// 无法对装入指针的容器起效重载运算符
**()**,利用结构体1
2
3
4
5
6
7
8struct compare{
bool operator()(Food* ptr1,Food* ptr2){
if(ptr1->rating == ptr2->rating){
return ptr1->foodName < ptr2->foodName;
}
return ptr1->rating > ptr2->rating;
}
};1
2
3
4
5string highestRated(string cuisine) {
// 初始化set时,需要把比较运算符也作为参数
set<Food*,compare> foodList = cuisineToFood[cuisine];
return (*foodList.begin())->foodName;
}
返回最值
1 | set<int>s; |
- 注:*s.end()返回的是set容器的最后一个元素(应该是s的长度),而不是s队列中的最后一个元素,就是说返回的不是最大值。
二分查找
s.lower_bound() 返回第一个大于或等于给定关键值的元素s.upper_bound() 返回第一个大于给定关键值的元素s.equal_range() 返回一对定位器,分别表示 第一个大于或等于给定关键值的元素 和 第一个大于给定关键值的元素,这个返回值是一个pair类型,如果这一对定位器中哪个返回失败,就会等于s.end()
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 丁丁的小窝(*^_^*)!