1. use a map to store chats
2. return boost::optional 
3. don't throw exception just because a chat doesn't exist (the less exceptions the better - exception handling is not enforced by the type system and often causes hard to find bugs in corner cases and memory leaks)