C ++:错误:没有使用std :: map的重载函数实例

时间:2018-11-26 22:13:09

标签: c++ c++11

#include <iostream>
#include <mutex>
#include <map>
#include <thread>

using namespace std;

//Global variable
std::mutex mu; //declare a mutex
std::map<std::string, int> threadIDs;

void run(int id) {
    std::unique_lock<std::mutex> map_locker(mu); 
    threadIDs.insert(std::make_pair(std::this_thread::get_id(), id));
    map_locker.unlock();
}

int main()
{
    std::thread t[5];
    for (int i = 0; i < 5; i++) {
        t[i] = std::thread(run, i);
    }
    for (int i = 0; i < 5; i++) {
        t[i].join();
    }
    return 0;    
}//end of the code

您好,我尝试执行5个运行void run()函数的线程,并使用int保存线程ID和std::map的值。但是我在'。'下方有红色下划线。在threadIDs.insert(std::make_pair(std::this_thread::get_id(), id));行中说没有重载函数的实例... 我猜会发生错误,因为std::map想要一个string和一个int,但是我试图将std::this_thread::get_id()放在字符串位置。如何将线程标识放入std::map内?

1 个答案:

答案 0 :(得分:1)

std::this_thread::get_id返回<class '__main__.Bar'> () {} ,与std::thread::id不同。您的地图应存储std::string作为其键类型。