zoukankan      html  css  js  c++  java
  • 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表达式实现的,因为它的参数不是一个函数,而是一个结构体,或者不理会参数重载更简单。

  • 相关阅读:
    表:t_category
    使用 Javascript 代码,增加 HTML 新元素(节点)
    Kind Editor 笔记
    [ 摘 ] 对 js 运算符 “||” 和 “&&” 的总结
    Oracle 的分页查询,myBatis 配置文件
    ExtJS 的工具条及菜单
    发一个 ExtJS 4.2.0 的页面源码(规则比对公式 的设置页面)
    MyBatis 中的 set 元素用法(MyBatis 3.1.1)
    MySQL 存储过程,一个 4 层的游标,用于规则比对,不知道性能如何。
    jmeter从文件中读取参数
  • 原文地址:https://www.cnblogs.com/Younger-Zhang/p/15111887.html
Copyright © 2011-2022 走看看