4

我用以下方式编写了代码

#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 地图 m 引用传递给 hi 函数并且我更新了但它没有反映在主函数中。当我打印 m.size() 时,它只打印零。如何使用线程将 2D 地图引用传递给函数?

4

1 回答 1

8

线程构造函数将复制其参数,因此一种解决方案是使用std::ref

thread t = thread (hi, std::ref(m));

这将创建一个充当引用的包装器对象。包装器本身将被复制(从语义上讲,实际上副本可能会被省略),但底层映射不会。所以总的来说,它就像你通过引用传递一样。

于 2013-07-23T18:38:53.033 回答