#include "trie.hpp"
#include <iostream> // // Variants for visiting nodes // template <typename Object> struct Visitor { void operator()(const Object &object) const { std::cout << "visit object:" << object << std::endl; } }; template <typename Object> void visit(const Object &object) { std::cout << "visit function:" << object << std::endl; } // // Variants for generating keys // struct Key { static constexpr size_t size() { return ('Z' - 'A' + 1) + ('z' - 'a' + 1); } static constexpr size_t map(char c) { assert(c>='a' && c<='z' || c>='A' && c<='Z'); if (c>='a' && c<='z') { c = c - 'a' + 'A'; } return c - 'A'; } }; struct KeyCaseSensitive { static constexpr size_t size() { return ('Z' - 'A' + 1) + ('z' - 'a' + 1); } static constexpr size_t map(char c) { assert(c>='a' && c<='z' || c>='A' && c<='Z'); if (c>='a' && c<='z') { return c - 'a' + ('Z'-'A'+1); } return c - 'A'; } }; int main() { Trie<double, Key> trie1; Trie<double, KeyCaseSensitive> trie2; trie1.insert("Lehn", 42); trie1.insert("lehn", 123); trie1.insert("le", 666); trie1.insert("leH", 4242); trie2.insert("Lehn", 42); trie2.insert("lehn", 123); trie2.insert("le", 666); trie2.insert("leH", 4242); std::cout << "print all from trie1:" << std::endl << std::endl; trie1.visit("", visit<double>); std::cout << "print all from trie2:" << std::endl << std::endl; trie2.visit("", visit<double>); } |