看看我的程序,我已经声明了一个地图对象的矢量。
#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”索引对矢量条目进行排序,但是这个函数不起作用。 有谁能告诉我这个功能有什么问题和正确的排序方式?
答案 0 :(得分:2)
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
。