multiset容器使用上的一些疑问

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Cpp2088671660/article/details/45228293
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());


这两种写法是等价的.

猜你喜欢

转载自blog.csdn.net/Cpp2088671660/article/details/45228293