C++ algorithm implementation doesn't work

Имеется задача реализовать структуру данных "исторический массив".
Исторический массив изначально имеет размер n и заполнен нулями.
Он поддерживает следующие операции:
set(index, value) - присвоить элементу на позиции i значение value
begin_new_era(era_id) - эта операция начинает новую эру с номером era_id. В каждый момент времени активна единственная эра. Изначальная эра имеет индекс era_id=0. Когда начинается новая эра, предыдущая заканчивается.
get(index, era_id) - получить значение элемента на позиции index на момент окончания эры era_id.

Ограничения:
n(1≤n≤100000)
set index value ( 0≤index≤n−1, 0≤value≤10^9)
begin_new_era era_id (1≤era_id≤10^9)
get index era_id (0≤index≤n−1, 0≤era_id≤10^9)
Гарантируется, что при запросе значения из конкретной эры эта эра уже успела закончиться.
Гарантируется, что при создании эры с идентификатором era_id этот индентификатор еще не был использован.

Написал реализацию:

struct HistoricalArray {
    unsigned long long int size;

    unsigned long long int currentEra;
    unordered_map<unsigned long long int,vector<unsigned long long int>> era;

    HistoricalArray(unsigned long long int n) : size(n),currentEra(0) {
        era[currentEra].resize(n);
        std::fill(era[currentEra].begin(), era[currentEra].end(), 0);
    }
    
    void beginNewEra(int eraId) {
        currentEra = eraId;
        era[currentEra].resize(size);
        std::fill(era[currentEra].begin(), era[currentEra].end(), 0);
    }

    void set(unsigned long long int index, unsigned long long int value) {
        era.at(currentEra)[index] = value;
    }

    unsigned long long int get(unsigned long long int index, unsigned long long int eraId) {
        return era.at(eraId)[index];
    }
};

Однако данная реализация на некоторых юнит-тестах не работает.

Подскажите, что здесь не так с реализацией?


Ответы (0 шт):