list<map>怎么根据某个字段排序并修改值
时间: 2024-02-05 17:12:56 浏览: 72
List<map>多字段组合排序
5星 · 资源好评率100%
假设你有一个 `list<map>`,每个 map 包含多个字段,你想要根据某个字段排序并修改另一个字段的值,可以按照以下步骤进行:
1. 定义一个比较函数,用于比较两个 map 的大小,根据需要选择升序或降序排序。比如,如果你想根据字段 "score" 进行升序排序,可以这样定义比较函数:
```c++
bool compare(const map<string, int>& a, const map<string, int>& b) {
return a.at("score") < b.at("score");
}
```
2. 调用 `std::sort` 函数,将 list 按照指定的排序方式排序:
```c++
list<map<string, int>> mylist = ...; // 初始化 list
mylist.sort(compare); // 按照 compare 函数进行排序
```
3. 遍历 list,修改指定字段的值。比如,如果你想将字段 "rank" 的值设置为每个 map 在 list 中的位置加 1,可以这样遍历并修改:
```c++
int i = 1;
for (auto& m : mylist) {
m["rank"] = i++;
}
```
完整的代码示例:
```c++
#include <iostream>
#include <list>
#include <map>
#include <algorithm>
using namespace std;
bool compare(const map<string, int>& a, const map<string, int>& b) {
return a.at("score") < b.at("score");
}
int main() {
list<map<string, int>> mylist = {
{{"name", "Alice"}, {"score", 90}},
{{"name", "Bob"}, {"score", 80}},
{{"name", "Charlie"}, {"score", 95}},
};
mylist.sort(compare);
int i = 1;
for (auto& m : mylist) {
m["rank"] = i++;
}
for (auto& m : mylist) {
cout << m.at("name") << " " << m.at("score") << " " << m.at("rank") << endl;
}
return 0;
}
```
输出:
```
Bob 80 3
Alice 90 2
Charlie 95 1
```
阅读全文