c++ 两个Map容器的差异性比较,返回差异内容

在实际应用中 遇到比较两个Map容器的差异,并对差异性内容做处理,

发现没有相应的函数接口,

自己写了一个功能函数:

std::map<string, double> CompareMap(std::map<string, double> &mapSrc, std::map<string, double> &mapDst)
{
	if (mapSrc.size() == 0)
	{
		return mapDst;
	}

	std::map<string, double> diffMap;

	std::map<string, double>::iterator it = mapSrc.begin();
	while (it != mapSrc.end())
	{
		std::map<string, double>::iterator itDst = mapDst.find(it->first);
		if (itDst != mapDst.end())
		{
			if(fabs(itDst->second - it->second) > 0.000001)
			{
				diffMap.insert(make_pair(it->first, itDst->second- it->second));
				//return false;
			}
		}
		else
		{
			diffMap.insert(make_pair(it->first, 0-it->second));
		}
		it++;
	}

	std::map<string, double>::iterator dstit = mapDst.begin();
	while (dstit != mapDst.end())
	{
		std::map<string, double>::iterator itSrc = mapSrc.find(dstit->first);
		if (itSrc != mapSrc.end())
		{

		}
		else
		{
			diffMap.insert(make_pair(dstit->first, dstit->second));
		}
		dstit++;
	}

	return diffMap;
}

 

此函数仅仅实现了功能,未进行效率上的优化,如有优化,敬请回复

 

测试用例:

int main()
{

	std::map<string, double> firstPositionMap;
	firstPositionMap.insert(make_pair("EURUSD", 100));
	firstPositionMap.insert(make_pair("GBPUSD", 200));
	firstPositionMap.insert(make_pair("NZDUSD", 300));
	firstPositionMap.insert(make_pair("USDCNH", 400));
	firstPositionMap.insert(make_pair("USDRUB", 400));

	std::map<string, double> seconfPositionMap;
	seconfPositionMap.insert(make_pair("USDJPY", 100));
	seconfPositionMap.insert(make_pair("GBPUSD", 200));
	seconfPositionMap.insert(make_pair("NZDUSD", 500));
	seconfPositionMap.insert(make_pair("USDHKD", 400));
	seconfPositionMap.insert(make_pair("USDRUB", 300));

	//sendPosition-firstPosition
	//USDJPY 100
	//EURUSD -100
	//NZDUSD  200
	//USDHKD  400
	//USDCNH  -400
	//USDRUB  -100

	std::map<string, double> diffPositionMap;

	diffPositionMap = CompareMap(firstPositionMap, seconfPositionMap);

	std::map<string, double>::iterator it = diffPositionMap.begin();
	while (it != diffPositionMap.end())
	{

		std::cout << it->first << "  " <<it->second<< std::endl;
		it++;
	}
	getchar();
    return 0;
}

 

运行结果:

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值