【问题标题】:Which data structure is best for an ordered list of strings?哪种数据结构最适合字符串的有序列表?
【发布时间】:2015-03-20 08:58:27
【问题描述】:

我在一个容器中有一堆字符串。这些字符串在容器中必须是唯一的,但我想保留顺序或字符串(添加它们的顺序)。

有没有比使用向量并在每次添加操作之前测试元素是否已经在向量中更优雅的解决方案,例如通过使用 std::find from ?由于唯一性,我很想使用一个集合,但是我怎样才能保留将字符串添加到集合中的顺序呢?

【问题讨论】:

  • 很可能vector-解决方案具有最佳运行时性能,因为set 的树结构引入了额外的间接性。所以这是要考虑的事情:)
  • unordered_set 没有任何顺序,它们无效,因为他想保留字符串的顺序。此外,如果您必须对其进行迭代,则不建议使用它。
  • 我的意思是如果你可以添加到 unordered_set 那么你可以添加到 vector.unordered_set 帮助你使唯一,vector 帮助你保持顺序。但是你需要花费更多的内存。只是一个想法给你.. .

标签: c++ stl containers


【解决方案1】:

如果您要编写自己的容器,经典方法(例如,参见 Java 中的 LinkedHashSet)将是添加到树/哈希表的元素之间的链表;如果您可以控制树节点(您可以将 prev/next 指针直接存储在其中),这将特别有效。

这可以使用 STL 来完成(存储一些 struct 之类的

struct Elem
{
    std::string payload;
    std::set<Elem>::iterator prev;
    std::set<Elem>::iterator next;
}

),但更简单的方法是使用集合加上集合的迭代器向量,可能封装在某个类中以一致地处理删除。集合会处理存储和唯一性,向量会记住插入顺序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-17
    • 2010-11-21
    • 1970-01-01
    相关资源
    最近更新 更多