我是这样写代码的
#include <iostream>
#include <thread>
#include <map>
using namespace std;
void hi (map<string,map<string,int> > &m ) {
m["abc"]["xyz"] =1;
cout<<"in hi";
}
int main() {
map<string, map<string, int> > m;
thread t = thread (hi, m);
t.join();
cout << m.size();
return 0;
}
我将 2D map m 引用传递给 hi 函数并进行了更新,但它没有反射(reflect)在主函数中。当我打印 m.size() 时,它只打印零。我如何使用线程将 2D map 引用传递给函数?
最佳答案
线程构造函数将复制它的参数,所以一种解决方案是使用 std::ref
:
thread t = thread (hi, std::ref(m));
这将创建一个作为引用的包装器对象。包装器本身将被复制(语义上,实际上拷贝可能被省略),但底层映射不会。所以总的来说,它就像您通过引用传递一样。
关于c++ - 如何使用 std::threads 将多维映射的引用传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17818316/