21xrx.com
2024-12-22 21:00:01 Sunday
登录
文章检索 我的文章 写文章
C++ Map的排序方法
2023-07-04 19:47:33 深夜i     --     --
C++ Map 排序方法

在C++中,Map是一种基于关键字排序的容器,通常用于存储键值对。Map的键是唯一的,而值可以重复。在Map中,每个键值对都有其对应的索引,可以快速查找、插入和删除。

然而,在某些情况下,我们需要对Map进行排序,以便更好地进行数据处理。幸运的是,C++标准库提供了多种排序方法,可以根据自己的需求进行选择。

1.按键排序

按键排序是最常用的排序方法之一。Map中的键已经是唯一的,因此可以直接按键进行排序,从而将Map的键按字典顺序排列。

使用以下代码进行按键排序:


std::map<int, int> my_map = {

  5,

   30,

   10,

   20,

   40

};

for (auto const& pair : my_map) {

  std::cout << pair.first << " : " << pair.second << "\n";

}

输出结果为:


1 : 10

2 : 20

3 : 30

4 : 40

5 : 50

2.按值排序

有时候,我们需要按照Map的值进行排序。这可以通过使用自定义排序函数实现。以下是一个按值排序的示例:


bool sort_function(std::pair<int, int> a, std::pair<int, int> b)

  return a.second < b.second;

std::map<int, int> my_map = {

   50,

   30,

  1,

   20,

  4

};

std::vector<std::pair<int, int>> my_vector(my_map.begin(), my_map.end());

std::sort(my_vector.begin(), my_vector.end(), sort_function);

for (auto const& pair : my_vector) {

  std::cout << pair.first << " : " << pair.second << "\n";

}

输出结果为:


1 : 10

2 : 20

3 : 30

4 : 40

5 : 50

3.反向排序

有时候,我们需要将Map进行反向排序,即按照相反的顺序排列。这可以通过使用Map的rbegin()和rend()方法实现。以下是一个反向排序的示例:


std::map<int, int, std::greater<int>> my_map = {

   50,

  3,

  1,

  2,

  4

};

for (auto it = my_map.rbegin(); it != my_map.rend(); ++it) {

  std::cout << it->first << " : " << it->second << "\n";

}

输出结果为:


5 : 50

4 : 40

3 : 30

2 : 20

1 : 10

总之,C++中Map是一个非常有用的容器,可以用于存储和处理复杂的数据。使用上述排序方法,我们可以更好地处理和分析Map中的数据。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复