哪种数据结构最适合有序的字符串列表?
Which data structure is best for an ordered list of strings?
我的容器里有一堆字符串。这些字符串在容器中必须是唯一的,但我想保留顺序或字符串(添加它们的顺序)。
有没有比使用向量并在每次添加操作之前测试元素是否已经在向量中更优雅的解决方案,例如通过使用 std::find 从 ?由于唯一性,我很想使用集合,但是如何保留字符串添加到集合中的顺序?
如果您要编写自己的容器,class逻辑方法(参见 Java 中的 LinkedHashSet
)将是添加到 [= 的元素之间的链表19=];如果您可以控制树节点(您可以将 prev/next 指针直接存储在其中),这会特别有效。
这可以使用 STL 来完成(存储一些 struct
比如
struct Elem
{
std::string payload;
std::set<Elem>::iterator prev;
std::set<Elem>::iterator next;
}
),但更简单的方法可能是使用集合加上集合的迭代器向量,可能封装在一些 class 中以一致地处理删除。该集合将处理存储和唯一性,向量将记住插入顺序。
我的容器里有一堆字符串。这些字符串在容器中必须是唯一的,但我想保留顺序或字符串(添加它们的顺序)。
有没有比使用向量并在每次添加操作之前测试元素是否已经在向量中更优雅的解决方案,例如通过使用 std::find 从 ?由于唯一性,我很想使用集合,但是如何保留字符串添加到集合中的顺序?
如果您要编写自己的容器,class逻辑方法(参见 Java 中的 LinkedHashSet
)将是添加到 [= 的元素之间的链表19=];如果您可以控制树节点(您可以将 prev/next 指针直接存储在其中),这会特别有效。
这可以使用 STL 来完成(存储一些 struct
比如
struct Elem
{
std::string payload;
std::set<Elem>::iterator prev;
std::set<Elem>::iterator next;
}
),但更简单的方法可能是使用集合加上集合的迭代器向量,可能封装在一些 class 中以一致地处理删除。该集合将处理存储和唯一性,向量将记住插入顺序。