您的位置:首页 > 编程语言 > C语言/C++

C++容器--std::set

2017-12-06 12:41 295 查看

一、介绍

std::set集合的元素具有顺序性、唯一性等特性,可以指定比较函数进行排序。std::set和std::map一样以红黑树来实现。

set成员函数和非成员函数可以参考:

http://zh.cppreference.com/w/cpp/container/set

二、示例

#include <stdio.h>
#include <set>
#include <memory>

class Car {
public:
Car(float price) : price_(price) {
}

~Car() {
}

float price() const {
return price_;
}
private:
float price_;
};

struct CarCmp {
// 函数需要使用const修饰
bool operator()(const std::unique_ptr<Car> &l, const std::unique_ptr<Car> &r) const {
// l是否比r小
return l->price() < r->price(); // 这里不能用<=,否则插入相同的元素会触发断言
}
};

int main()
{
std::set<std::unique_ptr<Car>, CarCmp> car_set;  // 声明+比较器
typedef std::set<std::unique_ptr<Car>, CarCmp>::iterator CarItr;
typedef std::set<std::unique_ptr<Car>, CarCmp>::const_iterator CarConstItr;

// set插入
car_set.insert(std::unique_ptr<Car>(new Car(10.f)));
car_set.insert(std::unique_ptr<Car>(new Car(5.f)));
car_set.insert(std::unique_ptr<Car>(new Car(11.f)));
car_set.insert(std::unique_ptr<Car>(new Car(11.f)));

// set遍历
for (CarItr it = car_set.begin(); it != car_set.end(); it++) {
printf("price: %.2f\n", (*it)->price());
}

// set查找(查找的时候会根据CarCmp来比较)
CarItr it = car_set.find(std::unique_ptr<Car>(new Car(5.f)));
if (it != car_set.end()) {
printf("found\n");
}

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