最近写项目时,发现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是正常的。

C++屏蔽map自动排序相关推荐

  1. “避开”std::map自动排序

    说是 "避开",其实是利用他排序的特性: map<string, string> mymap;mymap.insert(pair<string, string&g ...

  2. c++map自动排序特性

    c++中的map会自动根据first值排序,这样排好序后输出第一个用begin,输出最后一个用rbegin first支持int和string类型的排序,其原理应该是ascii(这一点我没有考证,反正 ...

  3. java map 自动排序_java Map排序问题

    java 中,Map常见的有HashMap ,TreeMap等等,Map是一个接口,我们不能直接声明一个Map类型的对象,在实际开发 中,比较常用的Map性数据结构是HashMap和TreeMap,它 ...

  4. java map 自动排序_Java中Map的排序

    Map的种类 在Java中,Map的主要作用是存储键值对.由于是根据键得到值,所以不允许键重复.它主要有如下几个类别: HashMap: 最常用的Map,它根据键的HashCode值存储数据,根据键可 ...

  5. C++ STL容器 map禁止自动排序

    背景:key-value形式的数据,已经使用了map存储,后来要求读取时的顺序要和插入的顺序一致   方案一.再定义个数组,按顺序保存key (推荐)   方案二.map更换为unordered_ma ...

  6. Java 自动排序map_跟我学Java编程—应用自动排序的TreeMap

    前面介绍了Map接口的实现类LinkedHashMap,LinkedHashMap存储的元素是有序的,可以保持元素的插入顺序,但不能对元素进行自动排序.在一些编程应用场景中,如果在数据的存储过程中,能 ...

  7. 解决数组转对象后,key自动排序

    今天遇到个问题,将数组转为key value形式的对象后,key进行了自动排序,无法保持数组原有的顺序,所以这个时候就不能使用 Object,需要使用Map let arr= [{code: 'asd ...

  8. python set函数排序_python的set函数 Python中的set会自动排序

    python中如何在set中添加元素?语句是什么 python的set和其他语言类似, 是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合), inters ...

  9. Java8 对Map进行排序

    前言: 随着Java 8 的 Stream 之后推出后可以很优雅实现Map的排序. 示例: final Map<String, Integer> wordCounts = new Hash ...

最新文章

  1. 转:strcat与strcpy与strcmp与strlen
  2. Fiddler抓取手机(app)https包
  3. cocos3 深入理解tank和子弹之间的关系
  4. Py之prettytable:prettytable的简介、安装、使用方法之详细攻略
  5. PyQt4编程之自定义插槽
  6. mfc点击按钮让对话框关闭_WinXP系统开始菜单中关机按钮消失的恢复教程
  7. python用schedule模块实现定时任务
  8. 位运算(、|、^、~、>>、<<)
  9. Angular2 的 View Encapsulation(样式封装)
  10. Win10系统如何在Word中添加新字体
  11. WPS Office 国际版 添加中文语言包 及相关问题
  12. java引用不同包下同名类_Java--一个类中引用不同包下同名类
  13. SpringBoot(一):项目概述
  14. 一分钟,华北科技学院会发生什么?
  15. UltraEdit 注册机注册
  16. 数字化风控的八个应用场景(上)
  17. CSS transform变形记
  18. ESP32的MQTT AT固件烧录+STM32以ESP32的MQTT AT固件的AT指令连接EMQX下mqtt服务器实现消息订阅和发布
  19. 原生js封装picker地址三级联动方法
  20. win7平台下QT软件的打包与发布(部署与安装) 打包成安装包样式

热门文章

  1. 热修复 移动平台热更新技术背景
  2. go 代理加速配置详解
  3. 设置代理让github加速
  4. 企业如何查负面和不良事件?
  5. MySQL安装与应用
  6. cancase lin管脚_Vector CANCASE XL+CABLE 模块
  7. Fanuc发那科数据采集
  8. 免费杀毒软件卡巴斯基安装
  9. 考华为云认证要做什么准备,怎么做题库?
  10. 面试时如何用英语自我介绍?