c++ - 带有 lambda 比较器的集合对的向量
问题描述
我正在尝试制作一组成对的向量:vector<pair<set<int>, set<int>>>
但我想为这两组使用不同的 lambda 比较器。我试着做:
#include <bits/stdc++.h>
using namespace std;
int main() {
auto cmp = [&] (int a, int b) -> bool {
return a > b;
};
auto hi = [&] (int a, int b) -> bool {
return a < b;
};
vector<pair<set<int, decltype(cmp)>, set<int, decltype(hi)>>> lol(cmp, hi);
return 0;
}
但它给了我这个错误:
test.cpp:11:75: error: no matching function for call to ‘std::vector<std::pair<std::set<int, main()::<lambda(int, int)> >, std::set<int, main()::<lambda(int, int)> > > >::vector(main()::<lambda(int, int)>&, main()::<lambda(int, int)>&)’
ype(cmp)>, set<int, decltype(hi)>>> lol(cmp, hi);
^
compilation terminated due to -Wfatal-errors.
另外,还有什么方法可以初始化向量的大小吗?请帮忙。
解决方案
您正在尝试将 lambdas 传递给 external 的构造函数,该构造vector
函数没有将 lambdas 作为输入的构造函数。
您需要将 lambdas 传递给std::set
构造函数,这意味着您需要构造单个std::set
实例(请参阅C++11 std::set lambda comparison function),然后将它们推送到向量中,例如:
#include <vector>
#include <set>
#include <utility>
using namespace std;
auto cmp = [] (int a, int b) -> bool {
return a > b;
};
auto hi = [] (int a, int b) -> bool {
return a < b;
};
using set_cmp = set<int, decltype(cmp)>;
using set_hi = set<int, decltype(hi)>;
using set_pair = pair<set_cmp, set_hi>;
int main()
{
vector<set_pair> lol;
...
lol.push_back(make_pair(set_cmp(cmp), set_hi(hi)));
...
return 0;
}
这意味着您将无法预先调整向量的大小,因为它需要能够默认构造set
对象,因此您无法将 lambdas 传递给它们。如果需要,请改用无状态函子:
#include <vector>
#include <set>
#include <utility>
using namespace std;
struct cmp {
bool operator()(int a, int b) const {
return a > b;
}
};
struct hi {
bool operator()(int a, int b) const {
return a < b;
}
};
using set_cmp = set<int, cmp>;
using set_hi = set<int, hi>;
using set_pair = pair<set_cmp, set_hi>;
int main()
{
vector<set_pair> lol(...desired size...);
...
return 0;
}
推荐阅读
- python - 访问 .csv 文件时使用 Pandas 获取 KeyError
- three.js - 将 Three.js AxesHelper 添加到组的所有子项。Axes Helper 位置默认为 0,0,0 foreach axeshelper
- java - Java - 获取不包含参数的调用 URL
- javascript - 从 HTML 挂载中调用异步函数
- c++ - c++ 计时器稍后调用函数/方法?
- ios - iOS - 解密与内存不足相关的 iOS 崩溃的堆栈跟踪
- php - METAR 中的正则表达式
- php - 消除有一个类而不删除内容
- swift - 重构两个类似的 swift switch 语句
- python - Python TCP 套接字 - 单个客户端到多个服务器