Aleph-w 3.0
A C++ Library for Data Structures and Algorithms
Loading...
Searching...
No Matches
zip_utils_example.C File Reference

Unified zip operations for mixed STL/Aleph containers. More...

#include <iostream>
#include <iomanip>
#include <string>
#include <vector>
#include <list>
#include <set>
#include <tclap/CmdLine.h>
#include <htlist.H>
#include <tpl_dynArray.H>
#include <ah-zip-utils.H>
Include dependency graph for zip_utils_example.C:

Go to the source code of this file.

Functions

void print_section (const string &title)
 
void print_subsection (const string &title)
 
void demo_mixed_containers ()
 
void demo_predicates ()
 
void demo_transformations ()
 
void demo_utilities ()
 
void demo_advanced ()
 
void demo_conversion ()
 
void demo_practical ()
 
int main (int argc, char *argv[])
 

Detailed Description

Unified zip operations for mixed STL/Aleph containers.

This program demonstrates ah-zip-utils.H which provides zip operations that work seamlessly with both STL and Aleph containers, and even allows mixing them in the same operation. This unified approach eliminates container-specific APIs.

What is Zipping?

Zipping combines multiple containers element-wise:

Container 1: [a, b, c]
Container 2: [1, 2, 3]
Zipped: [(a,1), (b,2), (c,3)]

Key insight: Process related data from multiple sources together.

Key Feature: Container Interoperability

The Problem

Different zip libraries support different containers:

  • **ah-zip.H**: Aleph containers only
  • STL: No built-in zip (C++20 ranges add it)
  • Different APIs: Hard to mix containers

The Solution

ah-zip-utils.H provides unified zip that:

  • Works with any container type (STL or Aleph)
  • Automatically detects container type
  • Mixes containers in same operation
  • Uses same API for all

Example: Mixing Containers

std::vector<string> names = {"Alice", "Bob", "Charlie"};
DynList<int> ages;
ages.append(25); ages.append(30); ages.append(35);
// Mix STL and Aleph containers!
auto zipped = uni_zip(names, ages);
// Result: [("Alice", 25), ("Bob", 30), ("Charlie", 35)]

Functions Demonstrated

Basic Operations

  • **uni_zip()**: Create list of tuples from any containers
  • **uni_zip_it()**: Get unified iterator for zipped containers

Predicates

Transformations

Utilities

  • **uni_zip_take(n)**: Take first n tuples
  • **uni_zip_drop(n)**: Skip first n tuples
  • **uni_zip_min()**: Find minimum tuple (by first element)
  • **uni_zip_max()**: Find maximum tuple
  • **uni_unzip()**: Split tuples back into separate containers

Use Cases

Data Processing

// Process names and scores together
auto results = uni_zip_map(names, scores,
[](auto name, auto score) {
return name + ": " + std::to_string(score);
});
auto uni_zip_map(Op &&op, const Containers &... cs)
Map operation over zipped tuples.

Parallel Processing

// Process multiple related datasets
uni_zip_for_each(prices, quantities, costs,
[](auto price, auto qty, auto cost) {
process_order(price, qty, cost);
});
void uni_zip_for_each(Op &&op, const Containers &... cs)
Apply operation to each zipped tuple.

Data Validation

// Check if all pairs are valid
if (uni_zip_all(names, emails, is_valid_pair)) {
process_data();
}
bool uni_zip_all(Pred &&pred, const Containers &... cs)
Check if predicate holds for all zipped tuples.

Comparison with Alternatives

Feature ah-zip.H STL (C++20) ah-zip-utils.H
STL support ❌ No ✅ Yes ✅ Yes
Aleph support ✅ Yes ❌ No ✅ Yes
Mix containers ❌ No ❌ No ✅ Yes
Unified API ❌ No ❌ No ✅ Yes

Performance Considerations

  • Type detection: Minimal overhead (compile-time)
  • Iterator abstraction: Small overhead for unified interface
  • Efficiency: Operations are as efficient as underlying containers

Usage

# Run all demonstrations
./zip_utils_example
# Run specific demo
./zip_utils_example -s mixed # Mixed container demo
./zip_utils_example -s predicates # Predicates on zipped data
./zip_utils_example -s transform # Transformation demo
./zip_utils_example -s utilities # Utility helpers
./zip_utils_example -s advanced # Advanced usage
./zip_utils_example -s conversion # Conversions and interop
./zip_utils_example -s practical # Practical examples
# Show help
./zip_utils_example --help
See also
ah-zip-utils.H Unified zip utilities
zip_example.C Aleph-only zip operations (faster for Aleph containers)
uni_functional_example.C Unified functional (related)
Author
Leandro Rabindranath León
Date
2024

Definition in file zip_utils_example.C.

Function Documentation

◆ demo_advanced()

◆ demo_conversion()

◆ demo_mixed_containers()

void demo_mixed_containers ( )

Definition at line 181 of file zip_utils_example.C.

References Aleph::maps(), print_section(), print_subsection(), and Aleph::uni_zip_it().

Referenced by main().

◆ demo_practical()

void demo_practical ( )

◆ demo_predicates()

◆ demo_transformations()

void demo_transformations ( )

◆ demo_utilities()

◆ main()

◆ print_section()

void print_section ( const string &  title)

◆ print_subsection()

void print_subsection ( const string &  title)