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; }
相关文章推荐
- C++关联容器:map,set...
- c++STL容器(map,set,vector,stack,queue)
- C++学习笔记23——关联容器之set
- C++STL之Set集合容器
- C++ STL set集合容器
- C++ STL容器的学习使用(vector、queue、list、set、map)
- C++ STL 序列性容器之 std::vector 容器
- 【C/C++】关联容器pair map set
- C++ set 容器
- C++中防止STL中迭代器失效——map/set等关联容器——vector/list/deque等序列容器—如何防止迭代器失效—即erase()的使用
- C++ STL 序列性容器之 std::deque 容器
- C++:关联容器(pair、map、set)
- 滥用C++容器的教训:vector和set的查找效率问题
- 使用C++的map容器遇到的bug(map/set iterator not dereferencable)
- c++ stl容器set成员函数介绍及set集合插入,遍历等用法举例
- 使用C++的map容器遇到的bug(map/set iterator not dereferencable)
- C++联合容器set和map
- C++STL之关联容器【map】【set】
- c++中容器set的用法整理
- 容器 C++ set和map