地图容器的问题

Problems with map container

简介

我正在尝试创建一个带有 tcp 连接的端口转发示例,因此我需要用他的套接字映射客户端标识。当客户端请求端口转发时,我必须知道谁拥有套接字。

为此,我创建了以下代码:

std::map<std::string, tcp::socket> box_map;

std::map<std::string, tcp::socket>::iterator it;
it = box_map.find(id);
if (it != box_map.end())
    return;
else{
    box_map.insert(std::pair<std::string, tcp::socket>(id,s));
    return;
}

问题

但是我得到了以下错误:

error: use of deleted function ‘boost::asio::basic_stream_socket<boost::asio::ip::tcp>::basic_stream_socket(const boost::asio::basic_stream_socket<boost::asio::ip::tcp>&)’

tcp::socket 不可复制构造。因此,您必须通过使用 emplace:

移动套接字来就地构建新对
box_map.emplace(id, std::move(s));

或者,您仍然可以使用 insert 并进入您正在构建的 pair

box_map.insert(std::make_pair(id, std::move(s)));