multiset容器使用上的一些疑问

来源:互联网 发布:Ubuntu 自动获取ip 编辑:程序博客网 时间:2024/05/16 09:32
struct  CVal{int nVal;CVal(int n){ nVal = n; }};int main(){vector<int> vec = { 12,3,1,2,3,5,9,8,7,1,9,8,35 };bool(*pF)(const CVal& n1, const CVal& n2) = [](const CVal& n1, const CVal& n2)->bool{return n1.nVal < n2.nVal; };multiset < CVal, bool(*)(const CVal& n1, const CVal& n2)> Val(*pF);return 0;}


Val.emplace(vec.begin(), vec.end());这样使用会报错
error C2661: “CVal::CVal”: 没有重载函数接受 2 个参数
主要原因:
当我这样定义时,就会出错。
由此可见,报错是由添加第二个元素引发的.
当我这样写后也会报错.
error C2064: 项不会计算为接受 2 个参数的函数
这样写就正常使用了.
具体可能因为我的类的不完整造成的,也可能是其他原因。

</pre><pre name="code" class="cpp">vector<int> vec = { 12, 3, 1, 2, 3, 5, 9, 8, 7, 1, 9, 8, 35 };//auto pF =bool(*pF)(const CVal& n1, const CVal& n2) = [](const CVal& n1, const CVal& n2)->bool{return n1.nVal < n2.nVal; };multiset < CVal, bool(*)(const CVal& n1, const CVal& n2)> Val1(pF);multiset < CVal, decltype(pF)> Val(pF);Val.emplace(1);Val.emplace(*vec.begin());Val1.emplace(1);Val1.emplace(*vec.begin());


这两种写法是等价的.
0 0
原创粉丝点击