15 10 E:\dontknow\Administrator\Documents\csdn1.cpp [Error] template argument for 'template<class _RAIter, class _Compare> void std::sort(_RAIter, _RAIter, _Compare)' uses local type 'maxEnvelopes(std::vector<std::vector<int> >&)::<lambda(const std::vector<int>&, const std::vector<int>&)>'
时间: 2024-01-21 15:04:55 浏览: 25
这个错误通常是由于使用了 lambda 表达式作为 `std::sort` 的比较函数,但是编译器无法自动推导出 lambda 表达式的类型,需要手动指定类型。可以将 lambda 表达式的类型定义为 `std::function<bool(const std::vector<int>&, const std::vector<int>&)>`,然后将其作为 `std::sort` 的比较函数参数传递。
例如:
```
#include <vector>
#include <algorithm>
#include <functional>
std::vector<std::vector<int>> maxEnvelopes(std::vector<std::vector<int>>& envelopes) {
// lambda 表达式作为比较函数
auto cmp = [](const std::vector<int>& a, const std::vector<int>& b) {
return a[0] < b[0] || (a[0] == b[0] && a[1] > b[1]);
};
std::sort(envelopes.begin(), envelopes.end(), std::function<bool(const std::vector<int>&, const std::vector<int>&)>(cmp));
return envelopes;
}
```
相关问题
14 35 E:\dontknow\Administrator\Documents\csdn1.cpp [Error] '>>' should be '> >' within a nested template argument list
这个错误通常是由于在嵌套的模板参数列表中使用了 `>>`,导致编译器无法正确解析。这是因为 `>>` 在 C++11 中被解释为右移运算符,因此需要在嵌套的模板参数列表之间添加空格,以避免歧义。
例如:
```
std::vector<std::vector<int>> envelopes = {{5,4},{6,4},{6,7},{2,3}};
auto res = maxEnvelopes(envelopes);
for (auto& v : res) {
for (auto i : v) {
std::cout << i << " ";
}
std::cout << std::endl;
}
```
应改为:
```
std::vector<std::vector<int> > envelopes = {{5,4},{6,4},{6,7},{2,3}};
auto res = maxEnvelopes(envelopes);
for (auto& v : res) {
for (auto i : v) {
std::cout << i << " ";
}
std::cout << std::endl;
}
```
注意,这里的空格是必需的,否则编译器会将 `>>` 解释为右移运算符,从而导致语法错误。