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 {
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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

china_jeffery

你的鼓励是我前进的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值