【发布时间】:2016-06-29 22:39:04
【问题描述】:
我正在尝试使用无序映射来保存类中的滚动累加器。
首先让我展示一下什么是有效的。这是一个类中的累加器,它在没有地图的情况下按预期工作。注意累加器需要在初始化列表中进行初始化。
#include <iostream>
#include <boost/accumulators/accumulators.hpp>
#include <boost/accumulators/statistics/stats.hpp>
#include <boost/accumulators/statistics/rolling_mean.hpp>
namespace nmbstacc = boost::accumulators;
typedef nmbstacc::accumulator_set<double, nmbstacc::stats<nmbstacc::tag::rolling_mean >> MACC;
class RollMean {
public:
MACC m_acc;
RollMean(void) : m_acc(nmbstacc::tag::rolling_window::window_size = 3) {}
};
int main()
{
RollMean obj;
obj.m_acc(0.5);
obj.m_acc(1.5);
obj.m_acc(2.5);
obj.m_acc(3.5);
std::cout << "roll_mean: " << nmbstacc::rolling_mean(obj.m_acc) << std::endl;
std::getchar();
return 0;
}
但是,我需要一个无序映射来将这些累加器保存在一个类中,但似乎无法弄清楚如何编译以下程序。我不确定如何在不首先初始化滚动累加器的情况下声明主地图容器。
#include <iostream>
#include <boost/accumulators/accumulators.hpp>
#include <boost/accumulators/statistics/stats.hpp>
#include <boost/accumulators/statistics/rolling_mean.hpp>
#include <unordered_map>
namespace nmbstacc = boost::accumulators;
typedef nmbstacc::accumulator_set<double, nmbstacc::stats<nmbstacc::tag::rolling_mean >> MACC;
class RollMean {
public:
MACC m_acc;
std::unordered_map<std::string, MACC> mainmap;
RollMean(std::string name) : m_acc(nmbstacc::tag::rolling_window::window_size = 3) {
mainmap.emplace(name, m_acc);
}
};
int main()
{
RollMean obj("a");
obj.mainmap["a"](1.0);
std::cout << "roll_mean: " << nmbstacc::rolling_mean(obj.mainmap["a"]) << std::endl;
std::getchar();
return 0;
}
我收到以下错误:
错误 C2679 二进制“[”:未找到采用“boost::parameter::keyword”类型右侧操作数的运算符(或没有可接受的转换)
谢谢。
【问题讨论】:
-
如果你写
obj.mainmap["non_existing_key"]会发生什么?
标签: c++ boost data-structures