2016-06-29 2 views
1

정렬되지 않은 맵을 사용하여 클래스에서 롤링 축척을 유지하려고합니다.클래스의 정렬되지 않은 맵에서 롤링 축약 사용

먼저 무엇이 효과가 있는지 보여 드리겠습니다. 다음은지도없이 예상대로 작동하는 클래스 내의 누적 기입니다. 누적기를 초기화 목록에서 초기화해야합니다.

#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; 
} 

그러나, 내가 필요한 것은 수업 시간에 이러한 축전지를 개최 정렬되지 않은 맵지만 할 수는없는 다음과 같은 프로그램을 컴파일하는 방법을 알아내는 것 같다. 롤링 어큐뮬레이터를 먼저 초기화하지 않고 mainmap 컨테이너를 선언하는 방법을 잘 모르겠습니다.

오류 C2679 진 '[': 어떤 운영자가 '부스트 :: 매개 변수 : 키워드를'유형의 오른쪽 피연산자를 취하는 발견 (또는이

#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; 
} 

는 나는 다음과 같은 오류가 발생합니다 허용되는 변환)

감사합니다.

+1

는 어떻게 될까? – llonesmiz

답변

2

@@v_ 힌트와 마찬가지로 map[key]은 돌연변이 연산으로, 기본 구성 요소가 없으면 삽입합니다.

그러나 요소 유형에 대한 기본 생성자는 없습니다. 따라서 해당 연산자를 사용할 수 없습니다.

obj.mainmap["a"] 대신 obj.mainmap.at("a")을 사용하면 누락 된 키 대신 예외가 발생합니다.

Live On Coliru

#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.at("a")(1.0); 

    std::cout << "roll_mean: " << nmbstacc::rolling_mean(obj.mainmap.at("a")) << std::endl; 
} 

인쇄 : 당신이``[ "non_existing_key"] obj.mainmap를 작성한다면

roll_mean: 1 
관련 문제