高中只是听说过stl,每次问老师老师都会说“有毒,千万别学”,于是stl有毒的言论深深的印在我脑海,看到就恐惧,于是一直没有学,但是大学后确实很多用到stl的地方必须去学习了。

现在想想老师当年的说法是可以理解的,相传stl速度上有所欠缺(与自己手写的数据结构作比较),毕竟OI的赛制比拼的不是时间,而是效率,同样的策略,使用stl可能就比使用自己写的数据结构少过一个测试点,一个测试点有多重要我是最清楚的2333往事不堪回首。

但是ACM不太一样,时间变得十分的宝贵,简单的题目直接上stl可能三分钟写完,自己手写要半个点,人与人就拉开差距了,难题一般都需要对高级数据结构进行定制,stl大家都用不上,不用太担心效率的问题。

下面进入正题

=======================

vector   是类似数组的存在,不过他是动态数组,在不确定数据量大小的时候十分好用

初始化

vector<int> nums;

vector<int> mynums(nums);

vector<int> rows(m,0);

vector<vector<char>> picture; //二维

int x=mynums.size();

插入&取出

nums.push_back(1);

int x=nums.pop_back();

遍历

for(int i=0;i<num.size();i++)

  nums[i];

for(vector<int>::iterator it=nums.begin();it!=nums.end();it++)

  cout<<*it;

===============================

unordered_map   是一个hash实现的映射(可以携带辅助数据)

===============================

unordered_set   是一个hash实现的数据存储器,快速判断数据存在性

===============================

set   是红黑树,logn的查找插入删除
默认的是左小右大,所以呢.begin是最小值,.rbegin是最大值

初始化
set<int> s;

插入&删除
s.insert(5);//会返回一个pair,first是迭代器,second是bool表示是否成功
s.erase(2);
s.clear();

遍历(中序遍历)
类似于vector
还可以反向遍历,用reverse_iterator

查找(返回迭代器,如果没找到,返回s.end())
it=s.find(5);
x=*it

摘自别人的博客,还没有测试,不理解为什么自定义比较规则要重载一对小括号。。。
http://blog.csdn.net/wangran51/article/details/8836160

6.自定义比较函数
    (1)元素不是结构体:
        例:
        //自定义比较函数myComp,重载“()”操作符
        struct myComp
        {
            bool operator()(const your_type &a,const your_type &b)
            [
                return a.data-b.data>0;
            }
        }
        set<int,myComp>s;
        ......
        set<int,myComp>::iterator it;
    (2)如果元素是结构体,可以直接将比较函数写在结构体内。
        例:
        struct Info
        {
            string name;
            float score;
            //重载“<”操作符,自定义排序规则
            bool operator < (const Info &a) const
            {
                //按score从大到小排列
                return a.score<score;
            }
        }
        set<Info> s;
        ......
        set<Info>::iterator it;

===============================

map   是二叉树,带有映射关系

===============================

c++ std的更多相关文章

  1. 【NX二次开发】NX内部函数,libuifw.dll文件中的内部函数

    本文分为两部分:"带参数的函数"和 "带修饰的函数". 浏览这篇博客前请先阅读: [NX二次开发]NX内部函数,查找内部函数的方法 带参数的函数: void U ...

  2. C++ std::set

    std::set template < class T, // set::key_type/value_type class Compare = less<T>, // set::k ...

  3. C++ std::priority_queue

    std::priority_queue template <class T, class Container = vector<T>, class Compare = less< ...

  4. C++ std::queue

    std::queue template <class T, class Container = deque<T> > class queue; FIFO queue queue ...

  5. C++ std::multimap

    std::multimap template < class Key, // multimap::key_type class T, // multimap::mapped_type class ...

  6. C++ std::map

    std::map template < class Key, // map::key_type class T, // map::mapped_type class Compare = less ...

  7. C++ std::list

    std::list template < class T, class Alloc = allocator > class list; List Lists are sequence co ...

  8. C++ std::forward_list

    std::forward_list template < class T, class Alloc = allocator > class forward_list; Forward li ...

  9. C++ std::deque

    std::deque template < class T, class Alloc = allocator > class deque; Double ended queue deque ...

  10. C++ std::array

    std::array template < class T, size_t N > class array; Code Example #include <iostream> ...

随机推荐

  1. 适配器模式(adapter)C++实现

    意图:将一个类的接口转换成客户希望的另一个接口. 适用性:1.你想使用一个已存在的类,而它的接口不符合你的需求. 2.你想创建一个可以复用的类,该类可以与其它不相关的类或不可预见的类协同工作. 类适配 ...

  2. [hihocoder][Offer收割]编程练习赛45

    互补二元组 Xi + Xj = Yi + Yj等价于Xi - Yi + Xj - Yj = 0 ,对每个二元组计算其x与y的差,每次加上其相反数的个数. #pragma comment(linker, ...

  3. hdu2819 Swap 最大匹配(难题)

    题目大意: 给定一个元素的值只有1或者0的矩阵,每次可以交换两行(列),问有没有方案使得对角线上的值都是1.题目没有限制需要交换多少次,也没限制行交换或者列交换,也没限制是主对角线还是副对角线.虽然没 ...

  4. ACM_____不再爱你……

    不再爱你…… 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 现在有一个圆柱形水杯,里面装满了水,在它的底部有一个小洞,通过一些简单的物理知识我们可以知道: 1.由于重力 ...

  5. 开源作品-PHP写的JS和CSS文件压缩利器(单文件绿色版)-SuMinify_PHP_1_5

    前言: 网站项目需要引用外部文件以减小加载流量,而且第一次加载外部资源文件后,其他同域名的页面如果引用相同的地址,可以利用浏览器缓存直接读取本地缓存资源文件,而不需要每个页面都下载相同的外部资源文件. ...

  6. 01--数据结构——动态链表(C++)

    数据结构——动态链表(C++)   定义一个节点: [cpp] view plain copy   print? #include <iostream> using namespace s ...

  7. background及background-size

    background有以下几种属性: background-color background-position background-size background-repeat background ...

  8. vue学习笔记——脚手架安装

    项目启动:npm run build 脚手架 vue cli vue cli --2 安装命令 #全局安装 npm install --global vue-cli #卸载vue-cli  npm u ...

  9. 死磕itchat源码--目录结构

    阅读itchat源码时,先弄清itchat的目录结构 itchat │ config.py │ content.py │ core.py │ log.py │ returnvalues.py │ ut ...

  10. github配置单个及多个sshkey的操作方法

    一.配置单个sshkey 配置SSHKey命令操作: git --version //检验git是否装好了 cd / cd ~/.ssh //到master目录下 ll //展示所有文件 ssh-ke ...