为multiset定义一个自定义的Compare
define a custom Compare for multiset
function<bool(const pair<int, int>&, const pair<int, int>&)> cmp = [](const pair<int, int> & left, const pair<int, int> & right){if(left > right) return true;};
//multiset<pair<int, int>, function<bool(const pair<int, int>&, const pair<int, int>&)> mt(cmp);
multiset<pair<int, int>, decltype(cmp)> mt1(cmp);
cout<<typeid(decltype(cmp)).name()<<endl<<typeid(cmp).name()<<endl;
注释代码(mt
)会出错,而下面的行(mt1
)不会。
我试着把两种类型的名称
cout
,它们是相同的。除此之外,我还试过这样:
multiset<pair<int, int>, const function<bool(const pair<int, int>&, const pair<int, int>&) &> mt(cmp);
或
multiset<pair<int, int>, function<bool(const pair<int, int>&, const pair<int, int>&) &> mt(cmp);
它们都不工作。
那么第二个参数的确切类型是什么呢?如果我不使用decltype
,我怎么申报?
仔细看看你的代码,你丢失了一个>
。
multiset<pair<int, int>, function<bool(const pair<int, int>&, const pair<int, int>&)>> mt(cmp);
// ~
使用decltype
应该是个好主意。
BTW:当if
在lambda中返回false
时,您应该返回一些东西。或者只是return left > right;
这三个多集表现出等价的排序行为:
#include <iostream>
#include <functional>
#include <set>
#include <utility>
#include <typeinfo>
using namespace std;
auto cmp = [](const pair<int, int> & left,
const pair<int, int> & right)
{
return left > right;
};
multiset<pair<int, int>, decltype(cmp)> mt1(cmp);
multiset<pair<int, int>, std::greater<>> mt2;
multiset<pair<int, int>, std::function<bool(const pair<int, int>&, const pair<int, int>&)>> mt3(cmp);
int main()
{
mt1.insert(std::make_pair(1,2));
mt2.insert(std::make_pair(1,2));
mt3.insert(std::make_pair(1,2));
}
在这三个中,我强烈建议选择这个:
multiset<pair<int, int>, std::greater<>> mt2;
相关文章:
- 编译一个自定义的tf操作,其中输入是5d张量
- C++ 一个自定义类字符串,将其分配给 C 样式字符串
- 我写了一个自定义的咖啡层.但是在训练期间,它说“**层不需要向后计算”
- 这个递归类需要一个自定义析构函数?
- 我正在声明一个自定义优先级队列,包括 pair<pair<int,int>int >,如何清除它?
- 在1语句中传递一个自定义函数作为模板参数
- 如何创建一个qmake函数来创建一个自定义的make目标
- 预处理一个自定义文本文件,以使用Boost Spirit删除注释
- 从Java到C++:如何在另一个自定义类中使用一个自定义类名var
- 是否可以编写一个自定义 STL 分配器,该分配器使用指向用户提供的分配函数的指针
- C++:为unordered_set编写一个自定义哈希函数,该函数使用哈希表中的桶数
- 如何过载<<用于YAML::Emitter的运算符,以序列化包含另一个自定义类的向量的自定义类
- 为windows实现一个自定义的unistd.h来处理VisualStudio问题
- 需要一个自定义的丰富编辑控件(开源)
- 我可以为抛出bad_cast的情况安装一个自定义处理程序吗
- 如何在Qt/C++中构建一个自定义的本机OSX webkit小部件
- C++一个自定义的成员比较函数
- 创建一个自定义锁屏Windows7
- 为分布式系统构建了一个自定义的C++通信协议
- 如何定义一个自定义比较函数来按照一维数组排序对矩阵进行排序