Какова цель std :: set & lt; VALUE, std :: owner_less & lt; VALUE & gt; & gt ;?

Я пытаюсь разобрать этот пример 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;,

я прочел Как работает оператор запятой а также http://en.cppreference.com/w/cpp/memory/owner_less но я не уверен, какова цель.

Что на самом деле хранится в std::set? Что значит std::owner_less на самом деле делать? Какова цель создания контейнера с этой структурой вместо хранения connection_hdlсами?

5

Решение

Это не имеет ничего общего с оператором запятой. set<T> требует, чтобы T быть менее сопоставимым, т.е. operator < должны быть определены для T, Причина этого заключается в том, что множество хранит свои элементы упорядоченным образом (с помощью одного вида дерева или другого). Вы можете задать набор вторым аргументом шаблона — функтором, который сравнивает два элемента, чтобы набор мог использовать это сравнение. std::owner_less является шаблоном предиката, который работает с общими и слабыми указателями и выполняет упорядочение на основе владельца (а не на основе значения).

8

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]