做一个unordered_multimap键的平均值是更好的方法吗?
Is the a better way to do an average of a unordered_multimap key?
我正在unordered_multimap中搜索获取一个键的所有值,这实际上是堆叠一个整数和一个值,它们以纳秒为单位表示执行时间。我需要获取所有值才能将多键替换为一个具有平均值的键。
我尝试了一些代码,这个实际上是最有价值的:
std::unordered_multimap<int, std::chrono::nanoseconds> data;
std::chrono::nanoseconds average;
// *filling my map with value*
for (auto & pair : data){
auto range = data.equal_range(pair.first);
for_each (
range.first,
range.second,
[](std::unordered_multimap<int, std::chrono::nanoseconds>::value_type& x){
average = average + x.second;
}
);
average = average / data.count(pair.first);
data.erase(pair.first);
data.insert({pair.first, average});
}
我得到的错误error: 'average' is not captured : average = average + x.second;
与其使用std::for_each
,不如使用std::accumulate
。
请注意,从std::unordered_multimap
范围内删除条目是未定义的行为。装满不同的容器更安全。
std::unordered_multimap<int, std::chrono::nanoseconds> data;
// *filling my map with value*
std::unordered_multimap<int, std::chrono::nanoseconds> new_data;
for (auto it = data.begin(); it != data.end(); ++it){
auto range = data.equal_range(it->first);
auto average = std::accumulate (
range.first,
range.second,
std::chrono::nanoseconds{0},
[](auto sum, auto & x){
return sum + x.second;
}
) / std::distance(range.first, range.second);
new_data.emplace(key, average);
}
data.swap(new_data);
或者,如果您有 C++17,std::transform_reduce
.
std::transform_reduce(
range.first,
range.second,
std::chrono::nanoseconds{0},
std::plus<>{},
[](auto & x) { return x.second; }
)
相关文章:
- C++:将控制台输出存储在宏中更好吗
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 初始化具有非默认构造函数的std::数组项的更好方法
- 有没有比在库中添加一个并非由所有派生类实现的新虚拟函数更好的设计实践
- 为什么新的随机库比std::rand()更好
- 寻找一种更好的方法来表示无符号字符数组
- 哪种方法更好,性能明智
- 什么更好?返回对象指针列表?或返回指向对象列表的指针?
- 什么是更好的做法?通过指针或标识符传递类成员?
- 寻求更好地理解标准::访问
- 线程消息传递或更好:在"大师班"中访问其他班级的成员
- 有没有更好的方法来处理异常? try-catch块真的很丑
- 如何更好地检查两个 char 变量是否在一组值中?
- 有没有更好的方法对C++中的三个整数进行排序?
- 什么模板用法在阶乘中更好
- 平面缓冲区可以利用向量中的 0 吗?还是其他小波比哈尔变换更好?
- 我们应该如何使用枚举类进行索引(或者我们应该更好地避免这种情况)?
- Protobuf中重复字段的问题.使用重复字段进行序列化/反序列化的更好方法是什么?
- 比使用 s.str().c_str() 更好的表达?
- 做一个unordered_multimap键的平均值是更好的方法吗?