Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

This is the documentation for an old version of Boost. Click here to view this page for the latest version.
PrevUpHomeNext

Class template category

boost::histogram::axis::category — Maps at a set of unique values to bin indices.

Synopsis

// In header: <boost/histogram/axis/category.hpp>

template<typename Value, typename MetaData, typename Options, 
         typename Allocator> 
class category : public boost::histogram::axis::iterator_mixin< category< Value, MetaData, Options, Allocator > >
{
public:
  // construct/copy/destruct
  explicit category(allocator_type = {});
  template<typename It, typename  = detail::requires_iterator<It> > 
    category(It, It, metadata_type = {}, allocator_type = {});
  template<typename C, typename  = detail::requires_iterable<C> > 
    category(const C &, metadata_type = {}, allocator_type = {});
  template<typename U> 
    category(std::initializer_list< U >, metadata_type = {}, 
             allocator_type = {});
  category(const category &, index_type, index_type, unsigned);

  // public member functions
  index_type index(const value_type &) const noexcept;
  auto update(const value_type &);
  decltype(auto) value(index_type) const;
  decltype(auto) bin(index_type) const noexcept;
  index_type size() const noexcept;
  metadata_type & metadata() noexcept;
  const metadata_type & metadata() const noexcept;
  template<typename V, typename M, typename O, typename A> 
    bool operator==(const category< V, M, O, A > &) const noexcept;
  template<typename V, typename M, typename O, typename A> 
    bool operator!=(const category< V, M, O, A > &) const noexcept;
  auto get_allocator() const;
  template<typename Archive> void serialize(Archive &, unsigned);

  // public static functions
  static constexpr unsigned options() noexcept;
};

Description

The axis maps a set of values to bins, following the order of arguments in the constructor. The optional overflow bin for this axis counts input values that are not part of the set. Binning has O(N) complexity, but with a very small factor. For small N (the typical use case) it beats other kinds of lookup.

The options underflow and circular are not allowed. The options growth and overflow are mutually exclusive.

Template Parameters

  1. typename Value

    input value type, must be equal-comparable.

  2. typename MetaData

    type to store meta data.

  3. typename Options

    see boost::histogram::axis::option.

  4. typename Allocator

    allocator to use for dynamic memory management.

category public construct/copy/destruct

  1. explicit category(allocator_type alloc = {});
  2. template<typename It, typename  = detail::requires_iterator<It> > 
      category(It begin, It end, metadata_type meta = {}, 
               allocator_type alloc = {});
    Construct from iterator range of unique values.

    Parameters:

    alloc

    allocator instance to use.

    begin

    begin of category range of unique values.

    end

    end of category range of unique values.

    meta

    description of the axis.

  3. template<typename C, typename  = detail::requires_iterable<C> > 
      category(const C & iterable, metadata_type meta = {}, 
               allocator_type alloc = {});
    Construct axis from iterable sequence of unique values.

    Parameters:

    alloc

    allocator instance to use.

    iterable

    sequence of unique values.

    meta

    description of the axis.

  4. template<typename U> 
      category(std::initializer_list< U > list, metadata_type meta = {}, 
               allocator_type alloc = {});
    Construct axis from an initializer list of unique values.

    Parameters:

    alloc

    allocator instance to use.

    list

    std::initializer_list of unique values.

    meta

    description of the axis.

  5. category(const category & src, index_type begin, index_type end, 
             unsigned merge);
    Constructor used by algorithm::reduce to shrink and rebin.

category public member functions

  1. index_type index(const value_type & x) const noexcept;
    Return index for value argument.
  2. auto update(const value_type & x);
    Returns index and shift (if axis has grown) for the passed argument.
  3. decltype(auto) value(index_type idx) const;
    Return value for index argument.

    Throws std::out_of_range if the index is out of bounds.

  4. decltype(auto) bin(index_type idx) const noexcept;
    Return value for index argument.
  5. index_type size() const noexcept;
    Returns the number of bins, without over- or underflow.
  6. metadata_type & metadata() noexcept;
    Returns reference to metadata.
  7. const metadata_type & metadata() const noexcept;
    Returns reference to const metadata.
  8. template<typename V, typename M, typename O, typename A> 
      bool operator==(const category< V, M, O, A > & o) const noexcept;
  9. template<typename V, typename M, typename O, typename A> 
      bool operator!=(const category< V, M, O, A > & o) const noexcept;
  10. auto get_allocator() const;
  11. template<typename Archive> void serialize(Archive &, unsigned);

category public static functions

  1. static constexpr unsigned options() noexcept;
    Returns the options.

PrevUpHomeNext