📅  最后修改于: 2023-12-03 14:50:52.046000             🧑  作者: Mango
在 C++ 中,标准模板库(STL)为我们提供了很多方便的容器,其中 map
容器可以实现键值对的映射关系。但是,由于 map
是按键排序的,当我们需要按值排序时,就需要进行一些特殊处理。
本文将介绍如何在 C++ STL 中按值对 map
进行排序的方法。
map
进行排序为了按值对 map
进行排序,我们需要将 map
中的键值对转换为一个可以被排序的容器。可以使用 vector
容器来存储 map
中的值,并使用 sort
函数进行排序。
首先,我们需要将 map
中的值存储到 vector
中。以下代码给出了一个示例:
#include <iostream>
#include <vector>
#include <map>
#include <algorithm>
int main() {
std::map<std::string, int> my_map = {{"apple", 10}, {"banana", 5}, {"orange", 20}};
std::vector<std::pair<std::string, int>> my_vector;
for (auto const& pair : my_map) {
my_vector.emplace_back(pair);
}
return 0;
}
在上述代码中,我们首先创建了一个大小为 3 的 map
容器,其中键为字符串类型,值为整型。然后,我们将每个键值对存储到 vector
中。
接下来,我们可以使用 sort
函数对 vector
中的元素进行排序。以下代码给出了一个示例:
#include <iostream>
#include <vector>
#include <map>
#include <algorithm>
int main() {
std::map<std::string, int> my_map = {{"apple", 10}, {"banana", 5}, {"orange", 20}};
std::vector<std::pair<std::string, int>> my_vector;
for (auto const& pair : my_map) {
my_vector.emplace_back(pair);
}
std::sort(my_vector.begin(), my_vector.end(), [](auto const& a, auto const& b) {
return a.second < b.second;
});
for (auto const& pair : my_vector) {
std::cout << pair.first << ": " << pair.second << std::endl;
}
return 0;
}
在上述代码中,我们使用 sort
函数对 vector
中的元素进行排序。我们还定义了一个匿名函数作为排序的谓词,按照键值对中的值来进行排序。最后,我们遍历排序后的 vector
,输出每个键值对的值。
通过以上方法,我们可以在 C++ STL 中按值对 map
进行排序。我们需要将 map
中的键值对存储到 vector
中,然后使用 sort
函数对 vector
进行排序。
要注意的是,如果 map
中有重复的值,排序后的 vector
中可能存在多个相同的值,这需要根据实际情况进行处理。