21xrx.com
2024-05-20 16:29:00 Monday
登录
文章检索 我的文章 写文章
C++中如何对Map进行排序
2023-07-12 02:31:53 深夜i     --     --
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排序时,我们应该了解自己的需求并选择适当的方法。

  
  

评论区

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