地图容器的问题
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)));
简介
我正在尝试创建一个带有 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)));