C++容器--std::set
一、介绍std::set集合的元素具有顺序性、唯一性等特性,可以指定比较函数进行排序。std::set和std::map一样以红黑树来实现。set成员函数和非成员函数可以参考:http://zh.cppreference.com/w/cpp/container/set二、示例#include <stdio.h>#include <set>#include <memory>class Car
·
一、介绍
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;
}
更多推荐
已为社区贡献2条内容
所有评论(0)