【问题标题】:what is the purpose of std::set<VALUE, std::owner_less<VALUE>>?std::set<VALUE, std::owner_less<VALUE>> 的目的是什么?
【发布时间】:2013-03-20 15:50:49
【问题描述】:

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

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

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

std::set 中实际存储了什么? std::owner_less 实际上是做什么的?用这种结构制作容器而不是自己存储connection_hdls的目的是什么?

【问题讨论】:

  • 这与逗号运算符无关,您链接到std::owner_less 的页面应该直接回答您的问题。
  • std::set 接受多个模板参数,但只有第一个是明确需要的;如果你没有定义它们,其余的都有默认类型。第二个参数是一个用于排序的二元函数。
  • 顺便说一句,connection_hdlstd::weak_ptr&lt;void&gt;
  • @Joe :如果您阅读链接到的页面,您会知道std::weak_ptr&lt;&gt; 没有operator&lt;,因此如果没有特殊的比较器,它根本无法编译。 ;-]
  • @ildjarn 哦,好吧。我是 C++ 的新手,所以花了一段时间才沉浸在大声笑中。你说得更清楚了。太棒了!

标签: c++ set std owner


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2012-01-25
    • 2019-01-03
    • 2018-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-13
    相关资源
    最近更新 更多