在地图中对匹配对执行功能
Execute a function on matching pairs in a map
我有一些看起来像这样的代码;给定两个地图,如果first
密钥在两个地图中都存在,则将两个second
值乘以将所有产品总结。例如:
s1 = {{1, 2.5}, {2, 10.0}, {3, 0.5}};
s2 = {{1, 10.0}, {3, 20.0}, {4, 3.33}};
答案应为 2.5*10.0 + 0.5*20.0
,是匹配键的产品的总和
double calcProduct(std::map<int, double> const &s1, std::map<int, double> const &s2)
{
auto s1_it = s1.begin();
auto s2_it = s2.begin();
double result = 0;
while (s1_it != s1.end() && s2_it != s2.end())
{
if (s1_it->first == s2_it->first)
{
result += s1_it->second * s2_it->second;
s1_it++:
s2_it++;
}
else if (s1_it->first < s2_it->first)
{
s1_it = s1.lower_bound(s2_it->first);
}
else
{
s2_it = s2.lower_bound(s1_it->first);
}
}
return result;
}
我想重构,std::set_intersection
似乎与我想要的东西很近,因为该文档具有使用std::back_inserter
的示例,但是有没有办法让它在地图上工作并避免中间数组?
所使用的代码已经非常接近实现set_intersect
的方式。我看不到创建新地图并迭代它的任何优势。
但是,我想提到的代码有几件事。
如果您要增加迭代器,则不应该使它们稳定。
我希望在寻找同等元素时会有更多的错过。我建议先进行比比较少的:
double calcProduct( std::map<int , double> const &s1 , std::map<int , double> const &s2 )
{
auto s1_it = s1.begin();
auto s2_it = s2.begin();
double result = 0;
while ( s1_it != s1.end() && s2_it != s2.end() )
{
if ( s1_it->first < s2_it->first )
{
s1_it = s1.lower_bound( s2_it->first );
}
else if(s2_it->first < s1_it->first )
{
s2_it = s2.lower_bound( s1_it->first );
}
else
{
result += s1_it->second * s2_it->second;
s1_it++;
s2_it++;
}
}
return result;
}
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- QML按钮点击功能执行顺序
- 如何用共享库替换可执行C++程序的功能?
- 当再次触发信号时,从Qt插槽执行的功能被第二次调用时会发生什么?
- 是否有一个Windows驱动程序函数可以执行Windows文件api SeFileAttributes的等效功能
- 如何使用C++在sqlite3数据库中执行写文件功能
- "no main"用于C++中链接或执行的功能
- 维护/维持两个代码集的风险,一个用于 CPU,一个用于 GPU,需要执行非常相似的功能
- 是否有用于执行反向字符串拆分器的开箱即用功能?
- 线程功能之一不执行可能的比赛条件
- C 程序如果功能中的语句不执行.在逻辑上似乎是错误的
- 无法从Linux,C ++执行"my_script" python脚本"main(filename)"功能;pModule = PyImport_Import(pName);返回空值
- 在地图中对匹配对执行功能
- 仅从受信任的库执行功能
- 如何重载iostream运算符以在整个流上执行功能
- 如何在QT中关闭子窗口后执行功能
- 以间隔为C 执行功能
- 对按钮事件执行功能
- 设置主机和执行功能有什么区别
- 在特定的时钟时间执行功能