• C++ set/multiset 容器(关联式容器)


    1. 基本概念

     包含头文件:#include     //set和multiset一样

     自动排序!

    P.S. 对于自定义的数据类型,要指定排序规则(使用仿函数)

    2. 构造函数

     

    3. 大小和交换

    set不能resize。

     4. 插入和删除

     无法在指定位置插入数据,因为set会默认进行排序。

    5. 查找和统计

    6. set和multiset 区别

     

    7. pair对组创建

     

    1. pairint> p1 = make_pair("Jerry", 20);
    2. pairint> p2("Jerry", 20);
    3. cout << "name: " << p1.first << " age: " << p1.second << endl;

    8. set容器排序

    利用仿函数修改set的排序规则。

    仿函数(Functor)又称为函数对象(Function Object)是一个能行使函数功能的类。

    仿函数是定义了一个含有operator()成员函数的类,可以视为一个一般的函数,只不过这个函数功能是在一个类中的运算符operator()中实现,是一个函数对象,它将函数作为参数传递的方式来使用。调用仿函数,实际上就是通过类对象调用重载后的 operator() 运算符。

    仿函数的优缺点:

    优点:
    1)仿函数比函数指针的执行速度快,函数指针时通过地址调用,而仿函数是对运算符operator进行自定义来提高调用的效率。
    2)仿函数比一般函数灵活,可以同时拥有两个不同的状态实体,一般函数不具备此种功能。
    3)仿函数可以作为模板参数使用,因为每个仿函数都拥有自己的类型。
    缺点:
    1)需要单独实现一个类。
    2)定义形式比较复杂。


    仿函数的作用:
    1)作为排序规则,在一些特殊情况下排序是不能直接使用运算符<或者>时,可以使用仿函数。
    2)作为判别式使用,即返回值为bool类型。
    3)同时拥有多种内部状态,比如返回一个值得同时并累加。
    4)作为算法for_each的返回值使用

    示例:仿函数用作排序规则

    1. class KCompare //仿函数指定排序规则
    2. {
    3. public:
    4. bool operator()(int v1, int v2) //重载()运算符
    5. {
    6. return v1 > v2;
    7. }
    8. };
    9. void test05()
    10. {
    11. set<int, KCompare> s1;
    12. s1.insert(10);
    13. s1.insert(70);
    14. s1.insert(50);
    15. s1.insert(20);
    16. s1.insert(30);
    17. s1.insert(200);
    18. for (set<int, KCompare>:: iterator it = s1.begin(); it != s1.end(); it++)
    19. {
    20. cout << *it << " ";
    21. }
    22. cout << endl;
    23. }

  • 相关阅读:
    【OpenCV入门】第七部分——图像的几何变换
    css文本划线效果(text-decoration相关属性详解)
    表单插件——jquery.form.js
    打破中国企业类软件成长的怪圈,我找到了方法!
    ubuntu下qt无法加载mysql驱动
    高云FPGA系列教程(8):ARM串口数据接收(中断和轮询方式)
    通过match看rust
    Flutter实现PS钢笔工具,实现高精度抠图的效果。
    基于JSP+Servlet的校友论坛管理系统
    TornadoFx设置保存功能((config和preference使用))
  • 原文地址:https://blog.csdn.net/MWooooo/article/details/126706159