• STL 容器操作


    • vector

    set转化为vector:vec.assign(set.begin(), set.end())

    • map

    1. map默认从小到达排序,想要从大到小,可以:

    map<string, int, greater<string>>

     2. map 不可以使用sort排序!不过可以使用在定义map的时候,传入函数指针自定义map排序

    • list

    比如在第五个位置插入3个88的 错误方法

    auto ite = data.begin();

    data.insert(iter + 5388);

    ite不可以直接+5,不支持这个操作,实际上ite一般支持++,比如++ite比ite++更简单?

    正确方法:

    auto iter = begin(data);

    std::advance(iter, 5);

    data.insert(iter, 3, 88);

     但是vector的insert就可以直接vec.insert(vec.begin() + 5, 88);

     

    • set

    set没有push()和push_back()操作,取代的是:insert() 或 emplace()!

    • stack

    top(), size(), empty()

    push() / emplace(),pop()

    swap()

    • priority_queue

    优先队列,priority_queue<class Type,class Container,class Compare>,即类型,容器和比较器(比较器类型)

    默认容器为vector,可以自定义容器类型,并自定义排序函数,我们并不关心优先队列是不是vector实现的!

    但是要是出现了自定义类型,一般想要自定义函数,这个时候中间的容器就不可以省略了 —— 建议容器写在最后,根据自定义类型推测默认vector<T>容器!

    自定义比较有三种方法:

    // 在结构体/类内重载<
    struct Status{
            int val;
            ListNode* node;
            bool operator < (const Status &tmp) const{ 
            // 函数必须是静态的 使得该函数可以被 const 对象也就是常量所调用
            // 形参可以加上const关键字和&,保证安全性,提高效率
                return val > tmp.val;
            }
        };
        priority_queue<Status> pq;  
    // 自定义比较函数模板结构体,或者说重载的是()!!!
    struct cmp{
    
        bool operator ()(const node &a, const node &b)
        {
            return a.value>b.value;// 按照value从小到大排列
        }
    };
    priority_queue<node, vector<node>, cmp>q;

    第三种方法:友元函数,略

    没有见到使lambda表达式实现的,因为它的参数不是一个函数,而是一个结构体,或者不理会参数重载更简单。

  • 相关阅读:
    Test
    占位2
    开坑纪念
    function 类型(函数定义)----读书总结
    css位元素 after
    算法-哈希表
    CF547D
    CF538H
    CF516D
    CF505E
  • 原文地址:https://www.cnblogs.com/Younger-Zhang/p/15111887.html
Copyright © 2020-2023  润新知