C++map的sort
时间: 2025-05-09 19:39:04 浏览: 19
### 如何在C++中对`std::map`按键或值进行排序
#### 按键排序
由于`std::map`内部已经按照键的自然顺序进行了排序[^1],因此通常不需要额外的操作来按键排序。如果希望改变默认的升序排列方式,则可以在创建`std::map`实例时提供自定义比较器。
下面是一个简单的例子展示如何通过指定降序的方式初始化一个整数类型的映射表:
```cpp
#include <iostream>
#include <map>
int main() {
std::map<int, char, std::greater<int>> myMap;
myMap[3] = 'c';
myMap[1] = 'a';
myMap[2] = 'b';
for (const auto& pair : myMap) {
std::cout << "{" << pair.first << ": " << pair.second << "}\n";
}
return 0;
}
```
此代码片段展示了如何利用标准库提供的`std::greater<T>`作为第三个模板参数传递给`std::map`构造函数,从而实现逆向排序功能。
#### 按值排序
对于基于值的排序需求,因为`std::map`本身并不支持直接依据value字段来进行排序操作,所以一般会先将数据复制到另一个容器(比如`std::vector<std::pair<K,V>>`),再对其进行排序处理。这里给出一段示范性的源码用于说明这一过程:
```cpp
#include <algorithm> // For sort()
#include <iostream>
#include <map>
#include <utility> // For swap(), move()
void sortByValue(const std::map<char,int>& input){
// Copy elements from map into vector of pairs.
std::vector<std::pair<char,int>> vec(input.begin(),input.end());
// Sort using lambda expression that compares second element (values).
std::sort(vec.begin(),vec.end(),
[](const std::pair<char,int>& lhs,
const std::pair<char,int>& rhs){return lhs.second<rhs.second;});
// Print out results after sorting.
for(auto &p : vec){
std::cout<< p.first <<" "<< p.second<<"\n";
}
}
int main(){
std::map<char,int> m={{'a',8},{'b',7},{'c',9}};
sortByValue(m);
return 0;
}
```
上述程序首先把原始`std::map`的内容拷贝到了一个新的动态数组里边,接着调用了STL算法中的`std::sort()`方法并传入了一个lambda表达式用来指示应该根据pair对象里的第二个成员即数值部分来做对比运算完成最终的结果输出。
阅读全文
相关推荐




















