尝试使用map实现
Trie implementation with using map
使用std::map<char,*NodeTrie>
是实现Trie数据结构的简单方法。如果我使用它会发生什么错误。我需要序列化和反序列化Trie。因此,节点中的每个映射都是AVL树。也许我要开销?但在地图上我可以更快地搜索,如果我使用列表的话。
template < typename T >
struct NodeTrie{
std::map<char,*NodeTrie>`
bool isWord;
T & val;
};
我喜欢你的想法。尝试是重要的数据结构,我对map<>有着愉快的体验s是高效的容器。
请注意:如果编译器支持它,则可以通过为每个节点单独分配来避免浪费内存。
template< typename T >
struct NodeTrie {
NodeTrie(const T& val = T(), bool isWord = bool() ) : val(val), isWord(isWord) {}
std::map<char, NodeTrie> span;
T val;
bool isWord;
};
以这种方式使用:
int main() {
typedef NodeTrie<int> iTree;
iTree t(0);
t.span['a'] = iTree(3);
...
}
此外,我还将val
成员更改为可复制构造对象:在这里使用引用对我来说似乎是错误的设计…
仅供参考,GNU libc++在其基于策略的数据结构库中已经有了一个trie模板。你可以像这样使用它:
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/trie_policy.hpp>
using namespace std;
using namespace pb_ds;
trie <string, int> myTrie;
关于使用此类的一些示例,您可以参考。
相关文章:
- 在C++中实现类似 python "map"函数的问题:调用类成员函数
- 在libc++和libstdc++之间的std::map上使用std::find时的实现差异
- libc++ 对 std::map/set::equal_range 的实现给出了意想不到的结果
- 如何实现 std::map::查找包含两个结构'Pos'结构的比较逻辑,每个结构包含 x 和 y 坐标
- 使用值类在C 中实现STL MAP
- 为什么 vector::operator[] 的实现方式与 map::operator[] 不同?
- std::与VS2013相比,GCC 4.7.2中的MAP实现效率非常低
- std::map 的排序是如何实现的
- std::map 是如何实现的,以便它可以要求其key_type具有可比性
- 用预定义的大小在C++中实现Map
- 尝试使用map实现
- 为什么C++STL使用RBtree来实现"std::map"?
- 在C++11中从C++17重新实现std::map::try_emplace()
- STL::MAP在C++中的内部实现
- 如何根据插入对的存在来实现不同的“std::map insert()”行为
- 下面使用Map和Vector实现递归级阶遍历的时间复杂度是多少
- 为什么python的字典是作为哈希表实现的,而std::map是基于树的?
- 自定义分配器- Microsoft std::map实现对相同的元素进行两次重新分配,GCC工作得很好
- 如何实现map<int,列表<string>>迭代器C++?
- 为什么libc++的map实现使用这种联合?