• map


    1、map insert 用于Map 拷贝的正确方式(end()不需要--)
        map<int, int> a
        map<int, int> b
        b.insert(a.begin(), a.end())
        其中倘若出现键值重复的数值,则仅插入不重复的.

        map insert 插入另一个map时 的效率
        看了一下VC中内部实现,也只是取出两个迭代器中间值每个执行insert,所以也没有什么效率优化处理

    2、map中数据插入删除导致map中数据乱掉
        可能是自己定义的key类型中的<操作符重载错误,map中的红黑树要求通过<比较操作可以唯一确定一组key的顺序而不受key传入(即insert)顺序影响。因为Map在查找操作中要求该顺序唯一性。

        一个非正确key举例

        class key
        {
            int a;
            int b;
            operator <(const class & key)
            {
                return (a < key.a ? true : b < key.b); // 错误写法,这种比较并不能唯一确定一组key的顺序,会受insert顺序影响
                /* // 正确写法应该是
                if(a < key.a)
                {
                    return true;
                }
                else(a = key.a)
                {
                    return b < key.b;
                }
                return false;
                */
            }
        }


        key编号  1    2
        a           1    3
        b           3    1

        在第错误<重载函数中,key1 < key2 而且 key2 < key1.也就是比较顺序会影响结果。结果不稳定。

    3、内存释放问题 先释放map迭代器指向的pair,再释放pair中保存的指针指向的内存,出现了内存越界访问。(该结论简单,只是表达一次问题定位中竟出现该中情况的感慨)

        这种问题可能不易出现,实际上在高压情况下则会必现。

  • 相关阅读:
    给部署在openshift上的WordPress添加wptouch插件
    让你的代码符合PEP8标准——sublime text 2 安装及使用 Python Flake8 Lint 插件
    Pylot——跨平台的网站压力测试工具
    window.print打印指定div
    window.parent与window.opener的区别 转
    获取Windows Mobile开发工具
    event.srcElement
    GridView的各种用法
    JS 中document详解
    llog
  • 原文地址:https://www.cnblogs.com/dongzhiquan/p/2362075.html
Copyright © 2020-2023  润新知