21xrx.com
2025-06-11 08:59:59 Wednesday
登录
文章检索 我的文章 写文章
C++中如何对Map进行排序
2023-07-12 02:31:53 深夜i     244     0
C++ Map 排序

C++中的Map是一个关联式容器,它将键值映射到数值。在实际工程开发中,经常需要对Map进行排序,以便按照特定的顺序访问Map中的键值对。以下是C++中对Map进行排序的方法:

1.使用STL库函数sort()

STL库提供了sort()函数,可用于对Map进行排序。sort()函数需要一个起始和一个结束迭代器作为参数。可以使用一个指向Map的起始迭代器和一个指向Map的结束迭代器来调用sort()函数。以下是一个使用sort()排序Map的示例代码:

#include <iostream>
#include <map>
#include <algorithm>
using namespace std;
int main()
{
  map<string, int> exampleMap = {"John", "Mary", 20, 28};
  cout << "Before sorting: " << endl;
  for (auto& element : exampleMap)
    cout << element.first << " : " << element.second << endl;
  
  // Sort map by value
  vector<pair<string, int>> mapPair(exampleMap.begin(), exampleMap.end());
  sort(mapPair.begin(), mapPair.end(),
    [](const pair<string, int>& firstPair, const pair<string, int>& secondPair)
      return firstPair.second < secondPair.second;
  );
 
  // Copy sorted elements back to original map
  exampleMap.clear();
  for (auto& element : mapPair) {
    exampleMap[element.first] = element.second;
  }
  cout << "After sorting by value: " << endl;
  for (auto& element : exampleMap)
    cout << element.first << " : " << element.second << endl;
  
  return 0;
}

2.使用自定义排序器

C++中的Map可以使用自定义排序器来进行排序。自定义排序器是一个函数对象,它接受两个键值对作为输入参数,并根据需要指定比较规则。以下是一个使用自定义排序器排序Map的示例代码:

#include <iostream>
#include <map>
using namespace std;
class ValueComparator {
public:
  bool operator()(const pair<string, int>& left, const pair<string, int>& right) const
    return left.second < right.second;
  
};
int main()
{
  map<string, int> exampleMap = {"John", 30, "Peter", 28};
  cout << "Before sorting: " << endl;
  for (auto& element : exampleMap)
    cout << element.first << " : " << element.second << endl;
  
  map<string, int, ValueComparator> sortedMap(exampleMap.begin(), exampleMap.end());
  cout << "After sorting by value: " << endl;
  for (auto& element : sortedMap)
    cout << element.first << " : " << element.second << endl;
  
  return 0;
}

以上是C++中对Map排序的两种方法。使用STL库函数sort()可以对Map按照键值,值和自定义排序器进行排序。如果需要更复杂的排序规则,可以使用自定义排序器。在进行Map排序时,我们应该了解自己的需求并选择适当的方法。

  
  

评论区