Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <boost/unordered_map.hpp>
- #include <boost/shared_ptr.hpp>
- #include <boost/make_shared.hpp>
- class TrieVertex;
- typedef boost::shared_ptr<TrieVertex> VertexPtr;
- class TrieEdge
- {
- public:
- char fC;
- VertexPtr fTarget;
- TrieEdge(char c, VertexPtr target) : fC(c), fTarget(target) {}
- };
- typedef boost::shared_ptr<TrieEdge> EdgePtr;
- class TrieVertex {
- public:
- boost::unordered_map<char, EdgePtr> fOutEdges;
- TrieVertex() : fOutEdges() {}
- };
- class ReverseTrie {
- private:
- VertexPtr fRoot;
- size_t fSize;
- public:
- ReverseTrie( ): fRoot(boost::make_shared<TrieVertex>()), fSize(0) {}
- ~ReverseTrie() {
- fRoot.reset();
- }
- void clear() {
- boost::make_shared<TrieVertex>().swap(fRoot);
- fSize = 0;
- }
- size_t size() {
- return fSize;
- }
- bool insertStringR(const std::string &word) {
- VertexPtr currentVertex = fRoot;
- for (std::string::const_reverse_iterator i = word.rbegin(); i != word.rend(); ++i) {
- if (*i == '