Для задания мы должны создать класс 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» и числовое значение?
Большое спасибо заранее.
Вам необходимо указать имена, например. '" добавить "' и соответствующую функцию, например. 'add' в карту - что должно выполняться в конструкторе. –