multiset容器使用上的一些疑问

struct  CVal
{
int nVal;
CVal(int n){ nVal = n; }
};
int main()
{
vector 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 个参数
主要原因:
当我这样定义时,就会出错。
multiset容器使用上的一些疑问_第1张图片
由此可见,报错是由添加第二个元素引发的.
multiset容器使用上的一些疑问_第2张图片
当我这样写后也会报错.
error C2064: 项不会计算为接受 2 个参数的函数
multiset容器使用上的一些疑问_第3张图片
这样写就正常使用了.
具体可能因为我的类的不完整造成的,也可能是其他原因。

	vector 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());


这两种写法是等价的.

你可能感兴趣的:(multiset容器使用上的一些疑问)