【发布时间】:2021-07-25 15:34:30
【问题描述】:
我知道标题很奇怪,但我不知道怎么说,这是我通常使用的一个非常糟糕的例子:
void exercise1(std::vector<bool> &MyVec) {
std::cout << "Exercise 1";
MyVec.at(0) = true;
}
void exercise2(std::vector<bool> &MyVec) {
std::cout << "Exercise 2";
MyVec.at(1) = true;
}
int main() {
int answer;
std::map<int, std::function<void(std::vector<bool> &MyVec)>> exercises = {
{1, exercise1},
{2, exercise2}
};
std::vector<bool> wasSeen(2);
std::fill(wasSeen.begin(), wasSeen.end(), false);
// assuming the user can only input the digits 1 and 2
do {
std::cout << "What exercise do you want to look at?\n (1 to 2)";
std::cin >> answer;
exercises.at(answer)(wasSeen);
} while (std::adjacent_find(wasSeen.begin(), wasSeen.end(), std::not_equal_to<>()) != wasSeen.end());
// do other stuff after all the functions get called
system("pause>0");
}
有没有比使用 bool 向量 wasSeen 并始终检查其所有值更有效的方法来检查地图中的每个 函数 是否已被调用? p>
【问题讨论】:
-
最好定义 set 并将输入保留在 set 中并检查该输入是否已被处理。
-
您可以在地图中的函数旁边存储一个布尔值(作为 std::pair)。当访问条目时,如果标志为假,则将其设置为真并增加一个计数器(即,您为每个条目增加一次计数器)。然后你所要做的就是将计数器的值与地图的大小进行比较。
-
@JonathanPotter 你能提供一些代码示例吗?我从来没有使用过你提到的任何功能
标签: c++ arrays performance vector mapping