• 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中保存的指针指向的内存,出现了内存越界访问。(该结论简单,只是表达一次问题定位中竟出现该中情况的感慨)

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

  • 相关阅读:
    CodeForces 347B Fixed Points (水题)
    CodeForces 347A Difference Row (水题)
    CodeForces 346A Alice and Bob (数学最大公约数)
    CodeForces 474C Captain Marmot (数学,旋转,暴力)
    CodeForces 474B Worms (水题,二分)
    CodeForces 474A Keyboard (水题)
    压力测试学习(一)
    算法学习(一)五个常用算法概念了解
    C#语言规范
    异常System.Threading.Thread.AbortInternal
  • 原文地址:https://www.cnblogs.com/dongzhiquan/p/2362075.html
Copyright © 2020-2023  润新知