c ++: ошибка: нет экземпляра перегруженной функции с использованием std :: map - PullRequest
0 голосов
/ 27 ноября 2018
#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, используя 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 голосов
/ 27 ноября 2018

std::this_thread::get_id возвращает std::thread::id, что не совпадает с std::string.Ваша карта должна хранить std::thread::id в качестве типа ключа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...