On Mon May 6 18:26:46 2013, david.hagood@gmail.com wrote: [...]
The basic idea is: Given you have a string and an instance of a dictionary, you can: 1) check if the string is already in the dictionary. 2) Add the string to the dictionary and return the dictionary entry (if the string is already present, return existing entry).
The dictionary entries contain a copy of the string. Entries may be compared for equality/inequality in O(1) time. The lifespan of the strings in the entry is managed by the entry.
What you described seems to be [string interning](http://en.wikipedia.org/wiki/String_interning), and it can be done simply as unordered_set<string> interned; const string *intern(const string &s) { return &*interned.insert(s).first; } assert(intern("abc") == intern("abc")); assert(intern("abc") != intern("xyz")); Cheers, Yakov