C++:每当将元素添加到集合中时,如何调用函数
C++: How to call a function whenever an element is added to a set?
我有两个函数。第一个用元素填充一个集合:
void fill_set(set<string> & theset, int number)
其中number
是要放入集合中的元素数。然后将一个函数应用于集合的每个元素。
set<string> myset;
vector<float> results;
fill_set(myset,1000000);
for (auto const & s : myset)
results.push_back(func(s));
问题是fill_set
需要很长时间才能完成,因此我想要一种在每次向myset
添加新元素时应用func
的方法,实现部分并行性。有什么办法可以在C++做到这一点吗?
你应该重新设计代码的工作方式,使其更加抽象。
template<class T> using sink=std::function<void(T)>;
现在 fillmset 变为:
void fill_set(sink<string> thesink, int number);
而不是theset.insert(foo)
你打电话给thesink(foo)
.
然后重构:
set<string> myset;
vector<float> results;
fill_set([&](auto x){myset.insert(std::move(x));},1000000);
for (auto const & s : myset)
results.push_back(func(s));
和重构:
set<string> myset;
vector<float> results;
fill_set([&](auto s){
auto worked = myset.insert(std::move(s));
if(worked.second)
results.push_back(func(s));
},1000000);
您可以更进一步,创建线程安全队列以及工作线程和线程池;但这一切都始于抽象出该集合。
相关文章:
- 如何用参数值调用函数(仅在运行时已知)
- 从python中调用C++函数并获取返回值
- 当使用通配符和null指针调用函数时,对输出的说明
- 从R调用C++函数并对其进行集成时出错
- 使用QTreeView,如何通过调用函数只突出显示特定的行/列
- 如何在qt中从另一个类调用函数
- 在 COUT 语句中使用 COUT 调用函数
- 如何从线程中的不同模块调用函数?
- C++从函数指针数组调用函数
- 当 A 在 for 循环中调用函数 B 时,如何计算函数 A 的空间复杂度?
- 如何在 C/C++ 中从外部库调用函数
- 如何使用运算符在同一行中多次调用函数
- 是否可以创建一个从不同类调用函数的线程?
- 无法为类成员调用函数
- 如何从另一个标头 c++ 调用函数
- C++有什么方法可以在既不调用函数模板也不提供其模板参数的情况下引用函数模板?
- 如何只允许在调用函数 B 后调用函数 A?
- 我可以这样调用函数吗?
- 如何在 c++ 的类中递归调用函数方法?
- 为什么在指向对象的迭代器上调用函数不允许我更改对象本身?