STL---排序模板参数

map 

对map进行排序

首先一定要注意map模板类的第三个模板参数,这个参数决定元素按键值升序或者降序在map中的存储方式:

默认:less<key>升序-----  < -----第一个小于取第一个

可设置:greater<key>降序------- > -----第一个大于取第一个

也可以自己定义键值比较函数,用函数名作为第三个参数


这个参数默认map 中的元素是以键值key递增存储的。

如果需要递减存储就设置第三个参数未greater<key>。

注意,key是你设置的数据的类型。

以上是初始建立map对象时设置的,如果运用过程中想要修改map容器的元素的存储顺序,怎么办:

自定义键值比较函数

详细链接

map中当key是结构体或者类时,需要重载哪些函数

看链接可知:函数对象中实现对函数调用符--小括号的重载。而map传递过去用于比较的是map的键,但是如果键是结构体或者类,那么结果或者类是比较不了的,所以这个时候需要我们自己重定义这个函数对象,重载()的时候,不是比较结构体或者类,而是比较结构体或者类中的某一个元素。

map实现按值排列存储---实现pair对存储数据

map实现不了按值存储,即使你实现了pair对按序插入,也不会按序在map中存储。我们只能将map中的pair对存储在vector中,让后自定义排序函数对pair对进行排序。

#include <iostream>
#include <map>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;

typedef pair<string, int> PAIR;
 
bool cmp_by_value(const PAIR& lhs, const PAIR& rhs) {
  return lhs.second < rhs.second;
}
 
struct CmpByValue {
  bool operator()(const PAIR& lhs, const PAIR& rhs) {
    return lhs.second < rhs.second;
  }
};

int main() {
  map<string, int> name_score_map;
  name_score_map["LiMin"] = 90;
  name_score_map["ZiLinMi"] = 79;
  name_score_map["BoB"] = 92;
  name_score_map.insert(make_pair("Bing",99));
  name_score_map.insert(make_pair("Albert",86));
 //把map中元素转存到vector中
  vector<PAIR> name_score_vec(name_score_map.begin(), name_score_map.end());
  sort(name_score_vec.begin(), name_score_vec.end(), CmpByValue());
 // sort(name_score_vec.begin(), name_score_vec.end(), cmp_by_value);
  for (int i = 0; i != name_score_vec.size(); ++i){
	  cout<<name_score_vec[i].first<<name_score_vec[i].second<<endl;
  }
  return 0;
}

set

和map同理

相关推荐

  1. STL基础(四)非类型模板参数

    2024-05-14 09:56:04       45 阅读
  2. STL--排序与检索

    2024-05-14 09:56:04       57 阅读
  3. STL——排序算法

    2024-05-14 09:56:04       59 阅读
  4. C++ 可变参数模板

    2024-05-14 09:56:04       38 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-14 09:56:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-14 09:56:04       106 阅读
  3. 在Django里面运行非项目文件

    2024-05-14 09:56:04       87 阅读
  4. Python语言-面向对象

    2024-05-14 09:56:04       96 阅读

热门阅读

  1. 进度条

    2024-05-14 09:56:04       33 阅读
  2. poi导出word 详细教程

    2024-05-14 09:56:04       22 阅读
  3. vue-在子路由前加/形成绝对路由

    2024-05-14 09:56:04       30 阅读
  4. python常见数据的存取

    2024-05-14 09:56:04       27 阅读
  5. C++中匿名对象介绍及使用场景详解

    2024-05-14 09:56:04       34 阅读
  6. 超级好用的C++实用库之日志类

    2024-05-14 09:56:04       37 阅读
  7. 如何不用额外变量交换两个数

    2024-05-14 09:56:04       33 阅读
  8. 专访 Staynex 创始人 Yuen Wong:酒店行业的变革者

    2024-05-14 09:56:04       29 阅读
  9. 电商秒杀系统-案例04-redis下的session控制

    2024-05-14 09:56:04       37 阅读
  10. 100条常见的c语言bug汇总上篇3

    2024-05-14 09:56:04       37 阅读