std :: set <value,std :: owner_less <value =“”>&gt;?</value,>的目的是什么?

时间:2013-03-29 21:38:20

标签: c++ set std owner

我正在尝试剖析这个websocket ++示例https://github.com/zaphoyd/websocketpp/blob/experimental/examples/broadcast_server/broadcast_server.cpp

在第126行,有typedef std::set<connection_hdl,std::owner_less<connection_hdl>> con_list;。我想知道为什么它不仅仅是typedef std::set<connection_hdl> con_list;

我已阅读How does the Comma Operator workhttp://en.cppreference.com/w/cpp/memory/owner_less,但我不确定其目的是什么。

std::set实际存储了什么? std::owner_less实际上做了什么?制作具有此结构的容器而不是自己存储connection_hdl的目的是什么?

1 个答案:

答案 0 :(得分:8)

这与逗号运算符无关。 set<T>要求T低于可比性,即应为operator <定义T。原因是该集合以有序的方式(通过一种树或另一种树)保持其元素。您可以提供带有第二个模板参数的集合 - 一个比较两个元素的仿函数,以便集合可以使用该比较。 std::owner_less是一个谓词模板,它对共享和弱指针进行操作,并执行基于所有者(而不是基于值)的排序。