21xrx.com
2025-04-28 17:40:50 Monday
文章检索 我的文章 写文章
C++中使用Map按Key进行排序
2023-06-30 00:50:09 深夜i     22     0
C++ Map 按Key 排序 STL

C++中的Map是一种常用的数据结构,它提供了一种将键映射到值的方法。通常情况下,我们需要按照Key的排序来访问Map中的数据。C++中的Map本身并没有提供按Key排序的方法,不过我们可以使用一些技巧来实现Map按Key排序。

首先,我们可以使用STL中的std::pair来封装Key和Value,然后利用STL中的sort函数来按Key排序。具体实现方法如下:

#include <iostream>
#include <map>
#include <algorithm>
using namespace std;
int main()
{
  map<int, int> myMap;
  myMap[1] = 3;
  myMap[2] = 2;
  myMap[3] = 1;
  vector<pair<int, int> > vec(myMap.begin(), myMap.end());
  sort(vec.begin(), vec.end());
  for (int i = 0; i < vec.size(); i++)
    cout << vec[i].first << ": " << vec[i].second<< endl;
  return 0;
}

以上代码中,我们首先定义了一个Map myMap,并向其中添加了三个键值对。接着,我们利用STL中的vector来存储键值对。这里需要注意的是,vector的元素类型为std::pair ,即键值对的类型。然后,我们调用sort函数对vector进行排序,sort函数默认按照pair的first进行排序。最后,我们遍历排序后的vector,按顺序输出键值对。

也可以使用仿函数来进行排序:

#include <iostream>
#include <map>
#include <algorithm>
using namespace std;
struct cmp {
  bool operator()(const int &a, const int &b) const
    return a < b;
  
};
int main()
{
  map<int, int, cmp> myMap;
  myMap[1] = 3;
  myMap[2] = 2;
  myMap[3] = 1;
  for (auto it=myMap.begin(); it!=myMap.end(); ++it)
    cout << it->first << ": " << it->second << endl;
  return 0;
}

以上代码中,我们定义了一个结构体cmp,仿函数实现对Key的排序。然后,我们在定义Map时,将仿函数作为第三个参数传入Map中。接着,我们遍历Map输出键值对。

综上,我们可以使用STL中的sort函数或仿函数的方法实现C++中的Map按Key排序。这些方法虽然不是直接在Map中排序,但它们提供了一种快捷的排序方式,可以满足我们对Map的排序需求。

  
  

评论区

请求出错了