【问题标题】:Which STL container to use if I want it to ignore duplicated elements?如果我希望它忽略重复的元素,使用哪个 STL 容器?
【发布时间】:2009-12-15 08:06:15
【问题描述】:

我正在寻找一些 STL(但不是 boost)容器,在以下操作之后将包含 2 个元素:“abc”和“xyz”:

std::XContainer<string> string_XContainer;
string_XContainer.push_back("abc");
string_XContainer.push_back("abc");
string_XContainer.push_back("xyz");

顺便说一句,我需要它只是为了最后调用string_XContainer.size(),以获取唯一字符串的总数。所以也许我什至不需要容器,还有更优雅的方法吗?

【问题讨论】:

    标签: c++ stl set


    【解决方案1】:

    std::set 是您所追求的。一个集合最多包含每个元素的一个实例,根据您定义的一些比较器函数进行比较。

    这是获取唯一字符串数量的一种方法。从您的示例中,字符串已经按排序顺序排列了吗?如果是这种情况,那么您可以创建一个数组(或其他一些简单的结构)并使用std::unique 算法。

    【讨论】:

    • 是的,set 是这个容器。 @Igor Oks,但请注意插入元素的顺序不会在集合中保持,我想这不是必需的。
    • 它不会保持插入顺序,但会保持严格的弱顺序。
    • 不要忘记 unique 只对排序范围起作用。您可以使用 std::adjacent_find(iBegin, iEnd, std::greater&lt;value_type&gt;()) == iEnd 技巧测试范围是否已排序,如果不是,则仅应用 sort
    • 优化前的配置文件:如果 std::sort 在已排序的数据集上已经具有 O(N) 行为(当然可能),则相邻查找没有帮助。
    猜你喜欢
    • 2012-05-20
    • 1970-01-01
    • 1970-01-01
    • 2016-01-02
    • 2013-09-24
    • 2012-11-23
    • 2018-12-03
    • 1970-01-01
    • 2010-12-06
    相关资源
    最近更新 更多