std::map默认是用std::less对key进行升序排列的,利用std::greater可以对key进行降序排序。

在Qt中,如果我们需要对QString或者int为key的map进行降序排列,除了自定义类型外,其实还可以利用std::map和std::greater实现

#include <QCoreApplication>
#include <map>
#include <algorithm>
#include <QDebug>
int main(int argc, char *argv[])
    QCoreApplication a(argc, argv);
    //按QString逆序
    std::map<QString, int, std::greater<QString> > strIntMap;
    strIntMap.insert(std::pair<QString, int>(QString("aa"), 1));
    strIntMap.insert(std::pair<QString, int>(QString("bb"), 2));
    strIntMap.insert(std::pair<QString, int>(QString("cc"), 3));
    strIntMap.insert(std::pair<QString, int>(QString("dd"), 4));
    for (std::map<QString, int, std::greater<QString> >::iterator iter = strIntMap.begin();
         iter != strIntMap.end(); ++iter)
        qDebug() << "(" << iter->first << "," << iter->second << ")";
    //按int逆序
    std::map<int, QString, std::greater<int> > intStrMap;
    intStrMap.insert(std::pair<int, QString>(1, QString("aa")));
    intStrMap.insert(std::pair<int, QString>(2, QString("bb")));
    intStrMap.insert(std::pair<int, QString>(3, QString("cc")));
    intStrMap.insert(std::pair<int, QString>(4, QString("dd")));
    qDebug() << Qt::endl;
    for (std::map<int, QString, std::greater<int> >::iterator iter = intStrMap.begin();
         iter != intStrMap.end(); ++iter)
        qDebug() << "(" << iter->first << "," << iter->second << ")";
    return a.exec();

运行结果:
在这里插入图片描述

std::map默认是用std::less对key进行升序排列的,利用std::greater可以对key进行降序排序。在Qt中,如果我们需要对QString或者int为key的map进行降序排列,除了自定义类型外,其实还可以利用std::map和std::greater实现代码:#include &lt;QCoreApplication&gt;#include &lt;map&gt;#include &lt;algorithm&gt;#include &lt;QDebug&gt;int 该库是C ++ 14模板库,因此没有要构建和安装的库。 它很大程度上基于Laurynas Biveinis对自适应基数树的出色实现。 在查看他的内存数据库实现。 与原始实现有显着差异。 它们主要源于以下事实: art::set和art::map旨在分别替代std::set和std::map 。 这意味着art::set和art::map必须满足Container , AllocatorAwareContainer , AssociativeContainer和ReversibleContainer ,而unodb不会尝试这样做。 在ART中可以使用哪种键是有限制的。 键必须可转换为BitwiseComparable ,并保持std::less<Key>或std::greater<Key>施加的顺序。 已经提供了整数键类型,指针和std::string (在std::les
map中存储的是key-value键值对,默认按照key值从小到大顺序排序。即map只能按照key排序。 pair的排序规则才是先按照key排,再按照value排序。 1. 默认排序规格 std标准库中带有和排序规则。 指定greater排序 2. 修改按key排序规格 当key为自定义数据时,默认的排序规则就会失效,需要重写针对自定义数据的排序规则。 重新写排序函数 3. 修改按value排序规则 map没有随机迭代器,不能使用函数。如果需要对value排序,可以再建立一个以valu
一、map的相关原理 map映照容器所处理的元素数据,与数据库中的具有键值的记录非常相似,由一个键值和其它若干个数据(映照数据组成),键值和映照数据之间,可建立一个数学上的映照关系。容器的数据结构是采用红黑树进行管理,元素值不允许重复,所使用的节点元素的比较函数,只对元素的键值进行比较,元素的各个数据项可通过键值检索。 数据构成如...
#include<iostream>//c++中标准的输入和输出流 using namespace std;//引用标准的名空间std #include<map>//引用map容器必须要包含map容器的头文件 class compare//一个名叫compare的类 public://在public下的作用域在类内类外都可以进行访问 bool operator()(int m, int n)const//注意要在后面加const return m > n;//降
排序桶排序快排希尔排序归并排序堆排序 数据结构实验之排序三:bucket sort:https://acm.sdut.edu.cn/onlinejudge3/contests/3481/problems/C #include <stdio.h> #include <stdlib.h> int x[105]={0}; int main() int n,i; scanf("%d",&n); for(i=0;i<n;i++)
Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。数学上映射是一个值只能对应 另一个集合的唯一的一个值,不能有两个或以上,但是同一个 集合里面 会有 不同元素 对应另一个集合的 相同元素,这个 是可以允许的。 下面说说 ma...
2018.3.4更新:在自定义类的操作符重载的编写的时候,都写'&lt;'符号,在使用STL的set(map)中体现出小的在前面;在使用priority_queue却提现出大的在前面。代码如下:#include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;set&gt; #include &lt;map&gt; #include &l...