21xrx.com
2024-12-26 16:03:45 Thursday
登录
文章检索 我的文章 写文章
如何在C++中使用Map自定义比较函数
2023-07-02 16:30:54 深夜i     --     --
C++ Map 自定义比较函数 语法 示例

在C++中,Map是一个非常重要的STL容器,它可以用于存储键值对。当我们需要按特定方式对Map中的元素进行排序时,就需要使用自定义比较函数。

首先,让我们看看使用Map的标准语法:


#include <map>

using namespace std;

int main()

{

  map<int, string> myMap;

  myMap.insert(pair<int, string>(1, "One"));

  myMap.insert(pair<int, string>(2, "Two"));

  myMap.insert(pair<int, string>(3, "Three"));

  for(auto& it : myMap)

    cout << it.first << " : " << it.second << endl;

  return 0;

}

这段代码创建了一个Map对象,并使用insert()函数插入一些键值对。在循环中,我们使用auto和引用以避免拷贝Map中的元素。

现在,假设我们想按值(即字符串)的字母顺序对Map进行排序。我们可以使用一个自定义比较函数来实现。


#include <map>

#include <string>

#include <iostream>

#include <algorithm>

using namespace std;

bool comp(const pair<int, string>& a, const pair<int, string>& b)

  return a.second < b.second;

int main()

{

  map<int, string> myMap;

  myMap.insert(pair<int, string>(1, "One"));

  myMap.insert(pair<int, string>(2, "Two"));

  myMap.insert(pair<int, string>(3, "Three"));

  myMap.insert(pair<int, string>(4, "Four"));

  myMap.insert(pair<int, string>(5, "Five"));

  vector<pair<int, string>> vec(myMap.begin(), myMap.end());

  sort(vec.begin(), vec.end(), comp);

  for(auto& it : vec)

    cout << it.first << " : " << it.second << endl;

  return 0;

}

在这段代码中,我们定义了一个名为comp的函数,它比较了Map中的两个元素以确定它们的顺序。我们将Map对象转换为一个std::vector以便进行排序。然后,我们遍历排序后的向量并打印结果。

现在,让我们看看如果我们想按键(即int)进行排序该怎么办。我们可以使用相似的方法创建一个新的函数:


bool compByKey(const pair<int, string>& a, const pair<int, string>& b)

  return a.first < b.first;

int main()

{

  map<int, string> myMap;

  myMap.insert(pair<int, string>(1, "One"));

  myMap.insert(pair<int, string>(5, "Five"));

  myMap.insert(pair<int, string>(2, "Two"));

  myMap.insert(pair<int, string>(3, "Three"));

  myMap.insert(pair<int, string>(4, "Four"));

  vector<pair<int, string>> vec(myMap.begin(), myMap.end());

  sort(vec.begin(), vec.end(), compByKey);

  for(auto& it : vec)

    cout << it.first << " : " << it.second << endl;

  return 0;

}

现在,我们使用compByKey函数将Map中的元素按键排序。

总结:

现在您已经了解了如何在C++中使用Map自定义比较函数。这个技术可以用于按任意方式对Map中的元素进行排序,从而使代码更具灵活性和可扩展性。

  
  

评论区

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