c ++ unordered map emplace参数无效

时间:2016-09-02 14:24:25

标签: c++ unordered-map emplace

如果我有这张地图

std::unordered_map<std::string, int*> sockets;  //a map holding all active sockets

我怎么能这样做:

sockets[_myId]=(int*)lp;  //all ok - insert succeeds

但我不能这样做:

if(!sockets.emplace(_myId,(int*)lp).second) { /*insert failed, act accordingly*/ }

无效的参数&#39; 候选人是: ?安德斯(#10000(...)&amp;&amp; ...) &#39; 我不明白为什么会这样。感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

  

什么是更好的写作方式?

这是一个无序映射,用一些套接字映射一些标识符。

在BSD套接字中,套接字描述符是一个int(或者至少可以转换为一个),所以让我们继续使用它。

似乎每个标识符都有多个套接字。这支持了一个载体。

这样:

using socket_vector = std::vector<int>;

using ident_to_sockets = std::unordered_map<std::string, socket_vector>;

现在我们可以将套接字附加到每个标识:

sockets[ident].push_back(sock);

答案 1 :(得分:1)

std::unordered_map<std::string, int*> something;
std::string a;
int* b;

something[a] = b;

// with emplace:
something.emplace(std::make_pair(a, b));

// also
something.emplace(std::unordered_map<std::string, int*>::value_type(a, b));