![]() |
C++ Library Extensions 2022.12.09
To help learn modern C++ programming
|
Implements set operations. More...
#include <tpf_types.hpp>
#include <tpf_output.hpp>
#include <tpf_ncrnpr.hpp>
#include <deque>
#include <exception>
#include <cassert>
#include <sstream>
#include <string>
#include <algorithm>
Go to the source code of this file.
Namespaces | |
namespace | tpf |
Includes subnamespace conversion. | |
namespace | tpf::set |
Implements set operations. | |
namespace | tpf::set::hidden |
Macros | |
#define | NOMINMAX |
Enumerations | |
enum class | tpf::set::sort_order { tpf::set::ascending , tpf::set::descending } |
enum class | tpf::set::sort_method { tpf::set::dictionary , tpf::set::size } |
Functions | |
template<typename Type > | |
constexpr auto | tpf::set::count_of_subsets (Type element_count) |
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types> | |
types::enable_if_container_type_t< ContainerType< EleType, Types... >, void > | tpf::set::smart_shrink_to_fit (ContainerType< EleType, Types... > &container, size_t factor=2) |
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types> | |
types::enable_if_container_type_t< ContainerType< EleType, Types... >, int > | tpf::set::compare_sets_dictionary (const ContainerType< EleType, Types... > &left, const ContainerType< EleType, Types... > &right) |
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types> | |
types::enable_if_container_type_t< ContainerType< EleType, Types... >, int > | tpf::set::compare_sets_size (const ContainerType< EleType, Types... > &left, const ContainerType< EleType, Types... > &right) |
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types> | |
types::enable_if_container_type_t< ContainerType< EleType, Types... >, bool > | tpf::set::operator== (const ContainerType< EleType, Types... > &left, const ContainerType< EleType, Types... > &right) |
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types> | |
types::enable_if_container_type_t< ContainerType< EleType, Types... >, bool > | tpf::set::operator!= (const ContainerType< EleType, Types... > &left, const ContainerType< EleType, Types... > &right) |
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types> | |
types::enable_if_container_type_t< ContainerType< EleType, Types... >, bool > | tpf::set::compare_less_dictionary (const ContainerType< EleType, Types... > &left, const ContainerType< EleType, Types... > &right) |
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types> | |
types::enable_if_container_type_t< ContainerType< EleType, Types... >, bool > | tpf::set::compare_less_equal_dictionary (const ContainerType< EleType, Types... > &left, const ContainerType< EleType, Types... > &right) |
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types> | |
types::enable_if_container_type_t< ContainerType< EleType, Types... >, bool > | tpf::set::compare_greater_dictionary (const ContainerType< EleType, Types... > &left, const ContainerType< EleType, Types... > &right) |
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types> | |
types::enable_if_container_type_t< ContainerType< EleType, Types... >, bool > | tpf::set::compare_greater_equal_dictionary (const ContainerType< EleType, Types... > &left, const ContainerType< EleType, Types... > &right) |
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types> | |
types::enable_if_container_type_t< ContainerType< EleType, Types... >, bool > | tpf::set::compare_less_size (const ContainerType< EleType, Types... > &left, const ContainerType< EleType, Types... > &right) |
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types> | |
types::enable_if_container_type_t< ContainerType< EleType, Types... >, bool > | tpf::set::compare_less_equal_size (const ContainerType< EleType, Types... > &left, const ContainerType< EleType, Types... > &right) |
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types> | |
types::enable_if_container_type_t< ContainerType< EleType, Types... >, bool > | tpf::set::compare_greater_size (const ContainerType< EleType, Types... > &left, const ContainerType< EleType, Types... > &right) |
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types> | |
types::enable_if_container_type_t< ContainerType< EleType, Types... >, bool > | tpf::set::compare_greater_equal_size (const ContainerType< EleType, Types... > &left, const ContainerType< EleType, Types... > &right) |
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types> | |
types::enable_if_container_type_t< ContainerType< EleType, Types... >, bool > | tpf::set::operator< (const ContainerType< EleType, Types... > &left, const ContainerType< EleType, Types... > &right) |
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types> | |
types::enable_if_container_type_t< ContainerType< EleType, Types... >, bool > | tpf::set::operator> (const ContainerType< EleType, Types... > &left, const ContainerType< EleType, Types... > &right) |
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types> | |
types::enable_if_container_type_t< ContainerType< EleType, Types... >, bool > | tpf::set::operator<= (const ContainerType< EleType, Types... > &left, const ContainerType< EleType, Types... > &right) |
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types> | |
types::enable_if_container_type_t< ContainerType< EleType, Types... >, bool > | tpf::set::operator>= (const ContainerType< EleType, Types... > &left, const ContainerType< EleType, Types... > &right) |
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types> | |
types::enable_if_container_type_t< ContainerType< EleType, Types... >, bool > | tpf::set::is_in_container (const EleType &ele, const ContainerType< EleType, Types... > &container) |
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types> | |
types::enable_if_container_type_t< ContainerType< EleType, Types... >, bool > | tpf::set::is_in_unsorted_container (const EleType &ele, const ContainerType< EleType, Types... > &container) |
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types> | |
types::enable_if_container_type_t< ContainerType< EleType, Types... >, bool > | tpf::set::is_sorted (const ContainerType< EleType, Types... > &container, sort_order order=sort_order::ascending, sort_method method=sort_method::size) |
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types> | |
types::enable_if_container_type_t< ContainerType< EleType, Types... >, bool > | tpf::set::sort_in_place (ContainerType< EleType, Types... > &container, sort_order order=sort_order::ascending, sort_method method=sort_method::size) |
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types> | |
ContainerType< EleType > | tpf::set::sort (ContainerType< EleType, Types... > container, sort_order order=sort_order::ascending, sort_method method=sort_method::size) |
template<template< typename, typename... > class ContainerType, typename EleType , typename RightContainerType , typename... Types> | |
std::enable_if_t< std::is_same_v< ContainerType< EleType, Types... >, remove_cv_ref_t< RightContainerType > > > | tpf::set::union_in_place (ContainerType< EleType, Types... > &left, RightContainerType &&right) |
template<template< typename, typename... > class ContainerType, typename EleType , typename RightContainerType1 , typename RightContainerType2 , typename... Types> | |
std::enable_if_t< std::is_same_v< ContainerType< EleType, Types... >, remove_cv_ref_t< RightContainerType1 > > &&std::is_same_v< ContainerType< EleType, Types... >, remove_cv_ref_t< RightContainerType2 > > > | tpf::set::union_in_place (ContainerType< EleType, Types... > &left, RightContainerType1 &&right1, RightContainerType2 &&right2) |
template<template< typename, typename... > class ContainerType, typename EleType , typename RightContainerType , typename... Types> | |
std::enable_if_t< std::is_same_v< ContainerType< EleType, Types... >, remove_cv_ref_t< RightContainerType > >, ContainerType< EleType, Types... > > | tpf::set::union_sets (ContainerType< EleType, Types... > left, RightContainerType &&right) |
template<template< typename, typename... > class ContainerType, typename EleType , typename RightContainerType1 , typename RightContainerType2 , typename... Types> | |
std::enable_if_t< std::is_same_v< ContainerType< EleType, Types... >, remove_cv_ref_t< RightContainerType1 > > &&std::is_same_v< ContainerType< EleType, Types... >, remove_cv_ref_t< RightContainerType2 > >, ContainerType< EleType, Types... > > | tpf::set::union_sets (ContainerType< EleType, Types... > left, RightContainerType1 &&right1, RightContainerType2 &&right2) |
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types1, typename... Types2> | |
ContainerType< EleType, Types1... > | tpf::set::union_flat (const ContainerType< ContainerType< EleType, Types1... >, Types2... > &sets) |
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types> | |
ContainerType< EleType, Types... > | tpf::set::intersection (const ContainerType< EleType, Types... > &left, const ContainerType< EleType, Types... > &right) |
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types> | |
ContainerType< EleType, Types... > | tpf::set::intersection (const ContainerType< EleType, Types... > &left, const ContainerType< EleType, Types... > &right1, const ContainerType< EleType, Types... > &right2) |
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types> | |
ContainerType< EleType, Types... > | tpf::set::difference (const ContainerType< EleType, Types... > &left, const ContainerType< EleType, Types... > &right) |
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types> | |
ContainerType< EleType, Types... > | tpf::set::difference (const ContainerType< EleType, Types... > &left, const ContainerType< EleType, Types... > &right1, const ContainerType< EleType, Types... > &right2) |
template<template< typename, typename... > class ContainerType, typename EleType , typename... Types, typename... OuterTypes> | |
void | tpf::set::hidden::build_subsets (ContainerType< ContainerType< EleType, Types... >, OuterTypes... > &SS, ContainerType< EleType, Types... > R, ContainerType< EleType, Types... > S, size_t count) |
template<template< typename, typename... > class ContainerType, typename EleType , typename... Types> | |
void | tpf::set::hidden::build_permutations (ContainerType< EleType, Types... > &L, ContainerType< EleType, Types... > &R, size_t r) |
template<template< typename, typename... > class ContainerType, typename EleType , typename... Types, typename... OuterTypes> | |
void | tpf::set::hidden::build_permutations (ContainerType< ContainerType< EleType, Types... >, OuterTypes... > &permutations, ContainerType< EleType, Types... > &L, ContainerType< EleType, Types... > &R, size_t r) |
template<template< typename, typename... > class ContainerType, typename EleType , typename... Types> | |
void | tpf::set::hidden::build_permutations_remainder (ContainerType< EleType, Types... > &L, ContainerType< EleType, Types... > &R, size_t r) |
template<template< typename, typename... > class ContainerType, typename EleType , typename... Types, typename... OuterTypes> | |
void | tpf::set::hidden::build_permutations_remainder (ContainerType< ContainerType< EleType, Types... >, OuterTypes... > &permutations, ContainerType< EleType, Types... > &L, ContainerType< EleType, Types... > &R, size_t r) |
template<template< typename, typename... > class ContainerType, typename EleType , typename... Types, typename... OuterTypes> | |
void | tpf::set::hidden::build_permutations (tpf::thread_bundle &tb, ContainerType< ContainerType< EleType, Types... >, OuterTypes... > &permutations, ContainerType< EleType, Types... > &L, ContainerType< EleType, Types... > &R, size_t r) |
template<template< typename, typename... > class ContainerType, typename EleType , typename... Types, typename... OuterTypes> | |
void | tpf::set::hidden::build_permutations (ContainerType< ContainerType< EleType, Types... >, OuterTypes... > &permutations, ContainerType< EleType, Types... > &L, ContainerType< EleType, Types... > &R) |
template<template< typename, typename... > class ContainerType, typename EleType , typename... Types> | |
void | tpf::set::hidden::build_permutations (tpf::thread_bundle &tb, ContainerType< EleType, Types... > &L, ContainerType< EleType, Types... > &R) |
template<template< typename, typename... > class ContainerType, typename EleType , typename... Types> | |
void | tpf::set::hidden::build_permutations (ContainerType< EleType, Types... > &L, ContainerType< EleType, Types... > &R) |
template<typename ThreadCountType , typename NType , typename RType > | |
auto | tpf::set::build_permutations (ThreadCountType thread_count, NType n, RType r) |
template<typename NType , typename RType > | |
auto | tpf::set::build_permutations (NType n, RType r) |
template<typename NType , typename RType > | |
auto | tpf::set::build_permutations_remainder (NType n, RType r) |
template<typename ThreadCountType , typename NType , typename RType > | |
auto | tpf::set::build_permutations_flat (ThreadCountType thread_count, NType n, RType r) |
template<typename NType , typename RType > | |
auto | tpf::set::build_permutations_flat (NType n, RType r) |
template<template< typename, typename... > class ContainerType, typename EleType , typename... Types> | |
ContainerType< ContainerType< EleType, Types... > > | tpf::set::build_subsets (const ContainerType< EleType, Types... > &S, size_t count=InvalidIndex) |
template<template< typename, typename... > class ReturnContainer = std::vector, template< typename, typename... > class SetContainer = std::list, typename... ContainerTails, typename EleType = int, typename CountType = int> | |
ReturnContainer< ReturnContainer< EleType > > | tpf::set::enumerate_combination_with_exclude (SetContainer< EleType, ContainerTails... > exclude_set, SetContainer< EleType, ContainerTails... > from_set, CountType r) |
template<typename EleType , template< typename, typename... > class ContainerType, typename... Types> | |
types::enable_if_container_type_t< ContainerType< EleType, Types... >, size_t > | tpf::set::minimum_value_index (const ContainerType< EleType, Types... > &container) |
template<typename EleType , typename IndexType , template< typename, typename... > class ContainerType, typename... Types> | |
types::enable_if_container_type_t< ContainerType< EleType, Types... >, size_t > | tpf::set::minimum_value_index (const ContainerType< EleType, Types... > &container, const std::vector< IndexType > &exclude_set) |
Implements set operations.
Definition in file tpf_set.hpp.
#define NOMINMAX |
Definition at line 15 of file tpf_set.hpp.