为了提高查找效率,这里将敏感词用树形结构存储,每个节点有一个map成员,其映射关系为一个string对应一个TreeNode。
STL::map是按照operator<比较判断元素是否相同,以及比较元素的大小,然后选择合适的位置插入到树中。为了提高map的插入及查询效率,可以选用hash_map或unordered_map。关于他们的效率,可以参考http://blog.csdn.net/whizchen/article/details/9286557。
下面主要实现了TreeNode类,进行节点的插入以及查询。(这里命名用Trie比较专业)
1 #include<map> 2 #include<string> 3 //#include<unordered_map> 4 using namespace std; 5 6 7 class Tree; 8 class TreeNode 9 { 10 friend class Tree; 11 typedef map<string,TreeNode> _TreeMap; 12 typedef map<string,TreeNode>::iterator _TreeMapIterator; 13 // typedef unordered_map<string,TreeNode> _TreeMap; 14 // typedef unordered_map<string,TreeNode>::iterator _TreeMapIterator; 15 private: 16 string m_character; 17 _TreeMap m_map; 18 TreeNode* m_parent; 19 public: 20 TreeNode(string character); 21 TreeNode(){ 22 m_character=""; 23 }; 24 string getCharacter() const; 25 TreeNode* findChild(string& nextCharacter); 26 TreeNode* insertChild(string& nextCharacter); 27 28 };