使用 std::map 的 Miniheap lambda
Miniheap lambda using std::map
对于一项任务,我们必须制作一个 MiniHeap class,它使用 std::map 将用户的输入命令连接到 lambda。这些命令使用基本的东西(push_back、pop_back、accumulate 等)操作 std::vector。我唯一的问题是添加功能。用户必须能够输入 "add 123" 以便“123”在向量中被推回。我当前的代码:
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 的构造函数 class。我已经在 MiniHeap 构造函数中评论了我遇到问题的部分。 std::find 如何处理包含部分 "add" 和数值的字符串?
非常感谢。
难点可能在于您假设指令:
std::cin >> command;
将一次性读取整个输入。它实际上会停在第一个空白处。知道了,你应该可以实现add
,使用与上面相同的方法获取输入流中剩余的数字
对于一项任务,我们必须制作一个 MiniHeap class,它使用 std::map 将用户的输入命令连接到 lambda。这些命令使用基本的东西(push_back、pop_back、accumulate 等)操作 std::vector。我唯一的问题是添加功能。用户必须能够输入 "add 123" 以便“123”在向量中被推回。我当前的代码:
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 的构造函数 class。我已经在 MiniHeap 构造函数中评论了我遇到问题的部分。 std::find 如何处理包含部分 "add" 和数值的字符串?
非常感谢。
难点可能在于您假设指令:
std::cin >> command;
将一次性读取整个输入。它实际上会停在第一个空白处。知道了,你应该可以实现add
,使用与上面相同的方法获取输入流中剩余的数字