gpt4 book ai didi

c++ - 如何在 C++ 中使用带有映射的排序函数?

转载 作者:行者123 更新时间:2023-11-28 02:41:26 25 4
gpt4 key购买 nike

看看我的程序,我声明了一个 map 对象 vector 。

#include<iostream>
#include<map>
#include<vector>
#include<algorithm>

using std::cout;
using std::cin;
using std::endl;
using std::map;
using std::string;
using std::vector;
using std::make_pair;
using std::multimap;
using std::sort;


int main(void)
{
vector< multimap<string , string> > data;

data.resize(1);
data[0].insert(make_pair("outlook","sunny"));
data[0].insert(make_pair("wind","weak"));

data.resize(data.size() + 1);

data[1].insert(make_pair("outlook","sunny"));
data[1].insert(make_pair("wind","strong"));

data.resize(data.size() + 1);

data[2].insert(make_pair("outlook","overcast"));
data[2].insert(make_pair("wind","weak"));

data.resize(data.size() + 1);

data[3].insert(make_pair("outlook","rain"));
data[3].insert(make_pair("wind","weak"));

data.resize(data.size() + 1);

data[4].insert(make_pair("outlook","rain"));
data[4].insert(make_pair("wind","weak"));

data.resize(data.size() + 1);

data[5].insert(make_pair("outlook","rain"));
data[5].insert(make_pair("wind","strong"));


sort(data.begin() , data.end() , []( vector< multimap<string,string> > a , vector< multimap<string,string> > b)
{
return a[0].find("outlook")->second < b[0].find("outlook")->second;
});


return 0;
}

我已经定义了一个排序函数来根据 map 的“outlook”索引对 vector 条目进行排序,但是这个函数不起作用。 谁能告诉我这个函数有什么问题以及正确的排序方式?

最佳答案

std::sort 的谓词将使用 vector::value_type 类型的参数调用,而不是 vector他们自己。将 lambda 表达式更改为

[](multimap<string,string> const& a, multimap<string,string> const& b)
{
return a.find("outlook")->second < b.find("outlook")->second;
}

const& 不是必需的,但您可能希望避免每次调用谓词时都对 multimap 进行不必要的复制。在引用结果之前,您可能还想检查 multimap::find 的结果。

而不是每次都调用vector::resize来添加一个新的multimap,你可以调用

data.emplace_back();

这将默认构造一个新的multimap

关于c++ - 如何在 C++ 中使用带有映射的排序函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25855702/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com