如果只是要找到STL某个容器的用法, 可以参考msdn和C++ Library Reference,msdn 上面的知识点应该是最新的,C++ Library Reference虽古老但是很多经典的容器使用有很多例子,二者可以相互参考,另外,本博客中提到的一些链接也是学习的好材料。

另有一篇文章总结很简洁,可以参考:烂笔头的专栏


一、vector

dfsf

二、map

dfdsf

三、set

总览:

  • set中每个元素都是不同的。
  • set中的元素默认是升序排列的,按照msdn中的描述来说是这样的:
    • Sorted, because its elements are ordered by key values within the container in accordance with a specified comparison function

    • Elements follow a strict weak ordering at all times.

应用注意:

  • set底层实现是红黑树,红黑树是理想平衡二叉查找树的一种统计学上的最优实现,具体原理参见wiki,需要知道的是树上所做的插入删除查找操作都是logN的复杂度,所以效率很高
  • 如果要改变一个set中某个位置的值,不是直接改变,而是先删除再插入

常用函数说明:

  • 迭代函数:begin()  end()  rbegin() rend()
  • 查找函数:
  • iterator find(
    const Key& _Key
    );
    返回的是迭代器,如果找不到,返回s.end()
  • 删除函数:erase,它有好几种调用形式
  • iterator erase(
    iterator _Where
    );
    iterator erase(
    iterator _First,
    iterator _Last
    );
    size_type erase(
    const key_type& _Key
    );
  • count函数:因为set不允许重复元素,所以count为1表示存在,count为0表示不存在

使用示例:longest consecutive sequence—leetcode problem

class Solution {

public:

    int longestConsecutive(vector<int> &num) {

        // Start typing your C/C++ solution below

        // DO NOT write int main() function

        if(num.size()==0){

            return 0;

        }

        

        set<int> s;

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

            s.insert(num[i]);

        }

        

        int len = 0;

        // If not erase, it is O(n^2). Smart. 

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

            int v = num[i];

            if(s.find(v)!=s.end()){

                s.erase(v);

                int count = 1;

                int u = v;

                while(s.find(--u)!=s.end()){

                    s.erase(u);

                    count++;

                }

                u = v;

                while(s.find(++u)!=s.end()){

                    s.erase(u);

                    count++;

                }

                if(count>len){

                    len = count;

                }

            }

        }

        

        return len;

    }

};

收集资料的过程中看到了几篇读书笔记,感觉很给力,自己没空读的书,有人整理得如此整齐,真是不错.

四、list

STL --最常见的容器使用要点的更多相关文章

  1. C++ STL中常见容器的时间复杂度和比较和分析

    C++ STL中常见容器的时间复杂度 map, set, multimap, and multiset 上述四种容器采用红黑树实现,红黑树是平衡二叉树的一种.不同操作的时间复杂度近似为: 插入: O( ...

  2. C++ STL中的常用容器浅谈

    STL是C/C++开发中一个非常重要的模板,而其中定义的各种容器也是非常方便我们大家使用.下面,我们就浅谈某些常用的容器.这里我们不涉及容器的基本操作之类,只是要讨论一下各个容器其各自的特点.STL中 ...

  3. 深入解析C++ STL中的常用容器

    转载:http://blog.csdn.net/u013443618/article/details/49964299 这里我们不涉及容器的基本操作之类,只是要讨论一下各个容器其各自的特点.STL中的 ...

  4. STL中的set容器的一点总结

    1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构 ...

  5. 【转】 STL中的set容器的一点总结

    1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构 ...

  6. STL中的set容器的一点总结(转)

    STL中的set容器的一点总结 1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂 ...

  7. stl中顺序性容器,关联容器两者粗略解释

    什么是容器 首先,我们必须理解一下什么是容器,在C++ 中容器被定义为:在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对像的指针,这种对象类型就叫做容器.很简单,容器就是保存其它对象的对象 ...

  8. STL Map和multimap 容器

    STL Map和multimap 容器 map/multimap的简介 map是标准的关联式容器,一个map是一个键值对序列,即(key,value)对.它提供 基于key的快速检索能力.       ...

  9. STL Set和multiset 容器

    STL Set和multiset 容器 set/multiset的简介 set是一个集合容器,其中所包含的元素是唯一的,集合中的元素按一定的顺序排列. 元素插入过程是按排序规则插入,所以不能指定插入位 ...

随机推荐

  1. PAT-乙级-1006. 换个格式输出整数 (15)

    1006. 换个格式输出整数 (15) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 让我们用字母B来表示“百” ...

  2. The 6th Zhejiang Provincial Collegiate Programming Contest->ProblemA:Second-price Auction

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3202 题意:拍卖东西,以第二高价的价格卖给出第一高价的人.输出最后获得东西 ...

  3. 如何通过 OAuth 2.0 使 iOS Apps 集成 LinkedIn 登录功能?

    社交网络早已成为人们日常生活的一部分.其实,社交网络也是编程生活的一部分,大多数 App 必须通过某种方式与社交网络交互,传送或接收与用户相关的数据.大多数情况下,用户需要登录某种社交网络,授权 Ap ...

  4. SPRING IN ACTION 第4版笔记-第九章Securing web applications-005-Applying LDAP-backed authentication

    一. 1.This method is the  LDAP analog to  jdbcAuthentication() @Override protected void configure(Aut ...

  5. Android:安卓资源引用符号的含义

    @代表引用资源 @*代表引用系统的非public资源,如: @*android:color/white @[package:]type/name引用自定义资源,如: android:text=&quo ...

  6. 【HDOJ】4370 0 or 1

    挺有意思的题目.注意等式的条件.等式1实际表示点1的出度为1,等式2实际表示点2的入度为1,等式表示其它点为中间点,入度和出度相等.很容易转换成一条最短路.spfa直接可求,C即为邻接矩阵.同时,可能 ...

  7. Linux命令行批量替换多文件中的字符串【转】

    Linux命令行批量替换多文件中的字符串[转自百度文库] 一种是Mahuinan法,一种是Sumly法,一种是30T法分别如下: 一.Mahuinan法: 用sed命令可以批量替换多个文件中的字符串. ...

  8. hdu4631Sad Love Story(多校3)(最接近点对)

    http://acm.hdu.edu.cn/showproblem.php?pid=4631 比赛的时候搜到了最接近点对的求法 Nlog(N) 又估摸着依次插入求的话会TLE 想了想觉得可以先把最近的 ...

  9. 关闭 VS的实时调试器

    可以这样关闭: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger HKEY_LOCAL_ ...

  10. eayui 验证扩展

    $.extend($.fn.validatebox.defaults.rules, { idcard : {// 验证身份证 validator : function(value) { return ...