在VS2015中我为什么要这样做
typedef std::pair<std::set<std::string>::const_iterator,std::set<std::string>::const_iterator> paircmpiter;
struct PairCmp {
bool operator()(const paircmpiter& lhs, const paircmpiter& rhs) const {
return (*lhs.first + *lhs.second) < (*rhs.first + *rhs.second);
}
};
std::map <paircmpiter,std::vector<std::pair<std::set<std::string>::const_iterator, int>>, PairCmp> markov;
但不是这个
auto paircmp = [](const paircmpiter& lhs, const paircmpiter& rhs) {
return (*lhs.first + *lhs.second) < (*rhs.first + *rhs.second);
};
std::map <paircmpiter,std::vector<std::pair<std::set<std::string>::const_iterator, int>>, decltype(paircmp)> markov;
我原以为decltype
允许我使用lambda函数作为比较。
如何使用lambda语法使其工作?
答案 0 :(得分:1)
您收到编译错误,因为closure objects created by lambda expressions are not default-constructible。但它们是可复制构建的。
要修复,您需要将闭包对象传递到std::map
constructor that takes a Compare
object:
std::map<
paircmpiter,
std::vector<std::pair<std::set<std::string>::const_iterator, int> >,
decltype(paircmp)
> markov{paircmp}; // <--- here