当我将字符串对象存储到std :: map
时std::map<std::string, SomeOtherData> map;
字符串将如何存储?我了解到std :: map通常被实现为红黑树,但字符串将如何存储在那里?作为特里?
答案 0 :(得分:1)
如果您认为实现每个节点有一个字符 - 答案为否,则每个节点存储std :: string,因此如果您要使用std :: strings作为键,您可以查看Ternary Trie(据我所知,由Sedgewick提出)
答案 1 :(得分:0)
你可以解决这个问题。 *map.begin()
为第一个键值对提供引用。只要密钥存在,该引用就不会失效,这意味着密钥对象必须存在于内存中。特别是,这意味着您不能拥有(纯)trie实现,因为trie不会明确地存储关键对象。相反,trie存储前缀。
(理论上,你可以拥有一个trie,并且仍然在每个节点中存储冗余密钥。这就是我称之为不纯的特里)