gpt4 book ai didi

c++ - 减去2张 map

转载 作者:行者123 更新时间:2023-11-30 02:22:36 24 4
gpt4 key购买 nike

您好找到了 2 映射总和的解决方案,现在我想做一个减法!

帖子是:Merge two maps, summing values for same keys in C++

现在我当然实现了函数 sub_pair 而不是 sum_pair ..但是没有找到一件事:

 while( true ) 
{
if(first1 == last1) return std::copy (first2, last2 , result);
if(first2 == last2) return std::copy (first1, last1 , result);

if(comp(*first1, *first2 ) < 0 )
{
*result = *first1 ;
++first1;
}
else if(comp(*first1, *first2 ) > 0 )
{
*result = *first2 ;
++first2;
}
else
{
*result = func(*first1, *first2);
++first1;
++first2;
}
++result ;
}

这里 *result = *first2 应该是负数...是 inputIter1 - inputIter2 ...但是如果我尝试把 *first2 * -1 ;我收到不允许转换的错误!我能怎么做 ?提前致谢

最佳答案

我认为您应该将其重写为:

template<class Map, class Function>
Map merge_apply( const Map &m1,
const Map &m2,
typename Map::mapped_type identity,
Function func )
{
auto it1 = m1.begin();
auto it2 = m2.begin();

auto comp = m1.value_comp();
Map res;
while( true ) {
bool end1 = it1 == m1.end();
bool end2 = it2 == m2.end();
if( end1 and end2 )
break;

if( end2 or ( !end1 and comp( *it1, *it2 ) ) ) {
res.emplace( it1->first, func( it1->second, identity ) );
++it1;
continue;
}
if( end1 or comp( *it2, *it1 ) ) {
res.emplace( it2->first, func( identity, it2->second ) );
++it2;
continue;
}
res.emplace( it1->first, func( it1->second, it2->second ) );
++it1;
++it2;
}
return res;
}

使用更简单:

auto m3 = merge_apply( m1, m2, 0, []( int a, int b ) { return a + b; } );
auto m4 = merge_apply( m1, m2, 0, []( int a, int b ) { return a - b; } );
auto m5 = merge_apply( m1, m2, 1, []( int a, int b ) { return a * b; } );

并且您不应提供比较器作为参数,而应使用 map 中已有的比较器以减少出错的可能性。

live example

关于c++ - 减去2张 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47099830/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com