[#BloombergLP-bdlb-TopologicalSortUtil-sort-03] = xref:BloombergLP.adoc[BloombergLP]::xref:BloombergLP/bdlb.adoc[bdlb]::xref:BloombergLP/bdlb/TopologicalSortUtil.adoc[TopologicalSortUtil]::sort :relfileprefix: ../../../ :mrdocs: Sort the input elements in topological order and write the resulting linear ordered set into the specified `resultOutIter`. If the sort is unsuccessful (the input is not an acyclic directed graph) write the elements that have not been sorted to the specified `unsortedOutIter` output. The input elements are provided as a sequence of (conceptual or physical) pairs between the specified `relationsBegin` and `relationsEnd` of the form (U, V), where U and V are nodes, and U precedes V in the output. Return `true` on success, and `false` if the sort fails due to a cycle in the input. The type `bsl::iterator_traits<INPUT_ITER>::value_type` must either be `bsl` or `std::pair` where the `first_type` and `second_type` are the same as `bsl::iterator_traits<OUTPUT_ITER>::value_type` or `TopologicalSortUtilEdgeTraits` must be specialized for the type, i.e., the supplied `bsl::iterator_traits<INPUT_ITER>::value_type` must support the following syntax: ` typedef typename bsl::iterator_traits<INPUT_ITER>::value_type IterValue; typedef typename bsl::iterator_traits<RESULT_ITER>::value_type ResultValue; == Synopsis Declared in `<bdlb_topologicalsortutil.h>` [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- template< class INPUT_ITER, class OUTPUT_ITER, class UNSORTED_OUTPUT_ITER> static bool sort( INPUT_ITER relationsBegin, INPUT_ITER relationsEnd, OUTPUT_ITER resultOutIter, UNSORTED_OUTPUT_ITER unsortedOutIter); ---- == Description typedef typename TopologicalSortUtilEdgeTraits<IterValue> Traits; typedef typename Traits::NodeType NodeType; for (INPUT_ITER it = relationshipPairsBegin; it != relationshipPairsEnd; ++it) { *result++ = Traits::from(*it); // U *result++ = Traits::to(*it); // V } ` Note that when the method returns `false`, `resultOutIter` may contain a subset of the elements in the right topological order, essentially the elements that the routine was able to sort before the cycle was discovered. In that case, the elements that the routine was unable to sort were written to the `unsortedOutIter` output iterator, in an unspecified order. [.small]#Created with https://www.mrdocs.com[MrDocs]#