std::map等容器 谓词 _Pr使用lambda 出错
来源:互联网 发布:九一三事件知乎 编辑:程序博客网 时间:2024/05/17 22:08
一直以为map的模板参数填_Pr谓词的方法和使用algorithm里面的算法填谓词一样。
今天用Qt creator写东西发现
std::map<MyClass,MyClass,[](const MyClass& lhs,const MyClass& rhs) -> bool {return ......;}>m;
这行代码会报错。提示 'std::map': invalid template argument for '_Pr', type expected。
以为是Qt不支持c++11,调了调,还是不行。
以为Qt对Lambda支持不完全,又用std::function包装了一下,也不行
又换到vs上做实验,仍旧不行。
仔细看了看,想了想才发现,以前在vs填谓词的时候是在构造函数里填的,不是填在模板参数里。
而且模板参数是要填 类型 的 ,不是填 实例 的。我真是蠢炸了。。。
Qt也害人不浅,对构造函数的提示根本不全,vs里map的构造函数会提示有十几个,里面有(_Pr& pred)这个构造函数可选。
Qt里面构造函数只提示默认构造函数,模板参数也不提示,我还是点到map的定义里才明确看到了四个模板参数。
想当然的就把lambda直接填到模板参数上了。
正确用法:
在模板参数里填谓词的类型,构造函数里填谓词的实例
比如要用lambda:
std::map<MyClass,MyClass,decltype(lambda)> m(lambda);
比如要用std::function
std::function<bool(const MyClass&,const MyClass&)> func;
func=......;
std::map<MyClass,MyClass,std::function<const MyClass&,const MyClass&>> m(func);
顺便鄙视一下自己,很早以前就发现qt对STL容器提示不全,根本没注意,自信不需要自动补全就可以盲打出来正确代码。
这次自信看了一波map的定义,就把lambda直接填到模板参数里了。蠢炸天……
还有,qt给的错误提示 type expected,多明显啊。。。把实例填进模板参数里了。。需要填类型。打脸啪啪响。。。
经实验,在Qt creator里,cpp里敲代码的时候,std::map<...> m();这样只提示无参数的构造函数。
如果显式调用构造函数std::map<...> m=std::map<...>(); 这样就会提示有11个构造函数(vs提示有14个)
但是对自定义类型,MyClass mc();这时候会提示所有的构造函数。。。
我真是一脸蒙蔽……
- std::map等容器 谓词 _Pr使用lambda 出错
- C++11使用lambda操作std::map
- std::map使用出错_Nodeptr _Pnode = _Root();
- std::map使用出错_Nodeptr _Pnode = _Root();
- stl std::map容器排序及使用注意事项
- std::map 迭代器偏移出错
- 使用std的vector,map,list, set等注意问题
- std::map的使用
- std::map的使用
- std::map 使用注意事项
- std::map的使用
- 关于std::Map容器的一点总结
- map等关联容器 vector等序列容器 如何防止迭代器失效 即erase()的使用
- map等关联容器 vector等序列容器 如何防止迭代器失效 即erase()的使用
- map等关联容器 vector等序列容器 如何防止迭代器失效 即erase()的使用
- map等关联容器 vector等序列容器 如何防止迭代器失效 即erase()的使用
- map等关联容器 vector等序列容器 如何防止迭代器失效 即erase()的使用
- 谓词与lambda表达式
- 进程与线程
- css基础
- VMware Workstation安装CentOS7.0 图文版
- 64位Ubuntu安装32位工具不过的问题
- leetcode解题之204 # Count Primes Java版 (1到n之间质数的个数,埃拉托色尼筛选法)
- std::map等容器 谓词 _Pr使用lambda 出错
- 用Python读取Word文档并写入Excel(一)
- ArcEngine开发 TOCC中“图层”标记不显示问题
- R语言使用RJDBC包连接MySql、Oracle数据库
- sklearn PCA使用
- 详解值传递和引用传递
- HDU-1213 How Many Tables
- 特性---封装
- Kalman Filter