2015-02-22 3 views
1

Для задания мы должны создать класс MiniHeap, который использует std :: map для подключения команд ввода пользователя к lambdas. Эти команды управляют std :: vector с основными вещами (push_back, pop_back, accumulate и т. Д.). Единственная проблема, с которой я столкнулся, - это функция добавления. Пользователь должен иметь возможность вводить «добавить 123», поэтому «123» отбрасывается обратно в вектор. Мой текущий код:Miniheap lambda using std :: map

class MiniHeap 
{ 
public: 
    MiniHeap() 
    { 
    // Make an add lambda that recognizes part of it's key as "add" and proceeds to recognize it's numerical part, convert it to an int and then adds it to m_Vector. 
    std::function<void()> add = [&](){}; 
    std::function<void()> list = [&](){for (int i = 0; i < m_Vector.size(); ++i){ std::cout << m_Vector.at(i) << std::endl; }}; 
    std::function<void()> pop = [&](){m_Vector.pop_back(); }; 
    std::function<void()> sum = [&](){std::cout << std::accumulate(m_Vector.begin(), m_Vector.end(), 0) << std::endl; }; 

    } 
    void Execute(const std::string & command)const 
    { 
     auto cmd = m_Commands.find(command); 
     if (cmd != m_Commands.end()) 
     { 
      cmd->second(); 
     } 
    } 
private: 
    std::vector<int> m_Vector; 
    std::map<std::string, std::function<void()>> m_Commands; 
}; 

int main() 
{ 
    //MiniHeap 
    MiniHeap heap; 
    for (;;) 
    { 
     std::string command; 
     std::cout << "> "; 
     std::cin >> command; 
     heap.Execute(command); 
    } 

    std::cin.get(); 
    return 0; 
} 

Улов: мне разрешено модифицировать конструктор класса MiniHeap. Я прокомментировал часть, с которой у меня возникли проблемы с конструктором MiniHeap. Как std :: find работает над строкой, которая имеет часть «add» и числовое значение?

Большое спасибо заранее.

+0

Вам необходимо указать имена, например. '" добавить "' и соответствующую функцию, например. 'add' в карту - что должно выполняться в конструкторе. –

ответ

2

Трудная точка, возможно, что вы предполагаете, что инструкции:

std::cin >> command; 

будет читать весь вход в один присест. Фактически он остановится на первом пробеле. Зная это, вы должны иметь возможность реализовать add, используя тот же метод, что и выше, чтобы получить оставшееся число во входном потоке.

+0

Я действительно предполагал, что он прочитает всю строку. Зная, что все, что мне нужно сделать, это выяснить, как получить оставшийся номер там. Очень признателен. – Emvidasch