C++屏蔽map自动排序

     最近写项目时,发现map自动排序了,以前没注意这个问题,可能ms考虑到map查询效率问题,插入时候就自动按key排序,查找其内部构造,发现其是模板实现方式,咱们可以改一改模板就可以避免自动排序(万不得已才用,数据大不建议)


 如果要屏蔽掉map的自带默认排序,我们需要重写以一个排序对象

#include <map>
#include <iostream>


template<class T>
struct DisableCompare : public std::binary_function<T, T, bool>
{
    bool operator()(T lhs, T rhs) const
    {
        if (lhs == rhs)
            return false;
        return true;
    }
};

int _tmain(int argc, _TCHAR* argv[])
{
    std::map<int, wstring,DisableCompare<int>> myMap;
    myMap.insert(std::make_pair(2, L"ABC1"));
    myMap.insert(std::make_pair(6,  L"ABC2"));
    myMap.insert(std::make_pair(8,  L"ABC3"));
    myMap.insert(std::make_pair(9,  L"ABC4"));
    myMap.insert(std::make_pair(1,  L"ABC5"));
   //也可以用下列模式插入
   //myMap[1]=L"ABC5";
  //myMap[12]=L"ABC121";

    auto it = myMap.begin();
    for (; it != myMap.end(); it++)
    {
        std::cout << it->first << std::endl;
    }
    return 0;
}

特别说明:

map底层是红黑树实现的,它的设计本就是按照插入值的大小来进行排序的,以加快查找速度,本文这样处理是违背了它的设计原则,所以在vs2013及以后版本,debug模式下,它会报错,release是正常的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值