在实际应用中 遇到比较两个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;
}
运行结果: