c++之map排序

c++之map排序

为了实现查找,map在插值时已经对key值进行了排序(使用红黑树结构)。如果想对map的value值进行排序,由于sort函数只可以对有序容器进行排序,那么可以将map转为vector后进行排序。

#include <iostream>
#include <map>
#include <algorithm>

// 对map不能直接排序, 使用vector进行排序

bool compVec(const std::pair<int, float>& a, const std::pair<int, float>& b)
{
  return a.second > b.second;
}

struct compByValue
{
  bool operator()(std::pair<int, float>& lhs, std::pair<int, float>& rhs)
  {
    return lhs.second > rhs.second;
  }
};

int main(int argc, char** argv)
{
  std::map<int, float> map;
  map[2] = 3.9;
  map.insert(std::pair<int, float>(7, 28.5));
  map.insert(std::pair<int, float>(4, -0.99));
  map.insert(std::map<int, float>::value_type(1, -0.17));
  map.insert(std::make_pair(6, 15.7));

  std::cout << "before sort" << std::endl;
  for (auto it = map.begin(); it != map.end(); ++it)
  {
    std::cout << it->first << " : " << it->second << std::endl;
  }

  // turn into vector
  std::vector<std::pair<int, float> > map_vec(map.begin(), map.end());

  std::sort(map_vec.begin(), map_vec.end(), compVec);
  // std::sort(map_vec.begin(), map_vec.end(), compByValue());

  std::cout << "after sort(descending order): " << std::endl;
  for (auto it = map_vec.begin(); it != map_vec.end(); ++it)
  {
    std::cout << it->first << " : " << it->second << std::endl;
  }

  return 0;
}

输出结果为:

before sort
1 : -0.17
2 : 3.9
4 : -0.99
6 : 15.7
7 : 28.5
after sort(descending order):
7 : 28.5
6 : 15.7
2 : 3.9
1 : -0.17
4 : -0.99

注: 由结果可知,在map插入后,已经按照key值进行了排序。

原文地址:https://www.cnblogs.com/ChrisCoder/p/10433543.html

时间: 2024-10-22 11:05:41

c++之map排序的相关文章

java Map排序(升序、降序、随机排序)

基础知识: 1 HashMap会使用key,根据hashcode进行默认排序. 2  LinkedHashMap根据存入先后进行排序 代码展示: 1 随机排序 java Map排序(升序.降序.随机排序),布布扣,bubuko.com

STL容器——对map排序

STL容器(三)——对map排序 对于map的排序问题,主要分为两部分:根据key排序:根据value排序.下面我们就分别说一下~ 1. 根据key进行排序 map默认按照key进行升序排序 ,和输入的顺序无关.如果是int/double等数值型为key,那么就按照大小排列:如果是string类型,那么就按照字符串的字典序进行排列~ (还记得之前说过的字典序吗?当时我们用到了next_permutation这个库函数!)下面我们展示一个例子,说明map中默认按照key升序排列 的情况. Exam

STL容器(三)——对map排序

STL容器(三)--对map排序 对于map的排序问题,主要分为两部分:根据key排序:根据value排序.下面我们就分别说一下~ 1. 根据key进行排序 map默认按照key进行升序排序,和输入的顺序无关.如果是int/double等数值型为key,那么就按照大小排列:如果是string类型,那么就按照字符串的字典序进行排列~(还记得之前说过的字典序吗?当时我们用到了next_permutation这个库函数!)下面我们展示一个例子,说明map中默认按照key升序排列的情况. Example

Map排序

HashMap: 最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度.HashMap最多只允许一条记录的键为Null(多条会覆盖);允许多条记录的值为 Null.非同步的. TreeMap: 能够把它保存的记录根据键(key)排序,默认是按升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的.TreeMap不允许key的值为null.非同步的. TreeMap默认按key进行升序排序,如果想改变默认的

stl之map 排序

排序问题,STL中默认是采用小于号来排序的,因为设置int等类型做key,它本身支持小于号运算,在一些特殊情况,比如关键字是一个结构体,涉及到排序就会出现问题,因为它没有小于号操作,insert等函数在编译的时候过不去,下面给出两个方法解决这个问题: 第一种:小于号重载,程序举例 1 #include <map> 2 #include <string> 3 using namespace std; 4 typedef struct tagStudentInfo 5 { 6 int

Map 排序

/** * 通过map 的 value 排序,并返回排序后的第一个条目 * * @param m 待排序集合 * @param desc true:降序排序,false:升序排序 * @return 返回排序后的第一个条目 * */ public Entry<String, Integer> getFristEntryOfSortedMap(Map<String, Integer> m , boolean desc) { Entry<String, Integer> e

Java对Map排序

Java中对Map(HashMap,TreeMap,Hashtable等)的排序时间 首先简单说一下他们之间的区别: HashMap: 最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度.HashMap最多只允许一条记录的键为Null(多条会覆盖);允许多条记录的值为 Null.非 首先简单说一下他们之间的区别:HashMap: 最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度.HashMap最

51nod 1095 Anigram单词【hash/map/排序/字典树】

1095 Anigram单词 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题  收藏  关注 一个单词a如果通过交换单词中字母的顺序可以得到另外的单词b,那么定义b是a的Anigram,例如单词army和mary互为Anigram.现在给定一个字典,输入Q个单词,从给出的字典中找出这些单词的Anigram. Input 第1行:1个数N,表示字典中单词的数量.(1 <= N <= 10000) 第2 - N + 1行,字典中的单词,单词长度 <= 10

Map排序(按key排序,按value排序)

主要分两种,按键排序.按值排序. 而且,按key排序主要用于TreeMap,而按value排序则对于Map的子类们都适用. 一.按键排序 按Key排序主要用于TreeMap,可以实现按照Key值的大小,在对象插入时直接插入到合适的位置,保持Map的顺序性. 来看TreeMap的构造函数:TreeMap(Comparator<? super K> comparator):构造一个新的.空的树映射,该映射根据给定比较器进行排序. 这里的比较器是key的比较器.所以定义比较器时用于比较的两个参数是K