【问题标题】:How to print values in multiset?如何在多集中打印值?
【发布时间】:2011-10-07 04:05:42
【问题描述】:

如何访问存储在数据结构multiset、C++中的值?

for (int i = 0; i < mlt.size; i++)
{
cout << mlt[i];
}

【问题讨论】:

    标签: c++ data-structures multiset


    【解决方案1】:

    如果 T 是您的多重集中包含的类型,

    for (std::multiset<T>::const_iterator i(mlt.begin()), end(mlt.end());
         i != end;
         ++i)
        std::cout << *i << "\n";
    

    【讨论】:

      【解决方案2】:

      看这个例子:http://www.cplusplus.com/reference/stl/multiset/begin/

      基本上,您可以像遍历任何其他 stl 容器一样遍历多重集。

      【讨论】:

        【解决方案3】:

        您应该(通常)通过编写循环来这样做。您通常应该使用预先编写好的算法,例如std::copy

        std::copy(mlt.begin(), mlt.end(), 
                  std::ostream_iterator<T>(std::cout, "\n"));
        

        视情况而定,有很多有用的变体,例如使用我在previous answer 中发布的infix_ostream_iterator。这主要在您想要分隔列表中的项目时很有用,以获取(例如)1,2,3,4,5 而不是ostream_iterator 会产生的1,2,3,4,5,

        【讨论】:

        • 我个人怀疑使用 copy algorithm 来实现非常明显的事情,比如打印所有值会使代码更清晰。特别是带有中缀运算符的示例证明了我的观点。只需将输出 1, 2, 3, 4, 5 所需的代码量和所需的语言掌握水平与 for 循环和您的方法进行比较。恕我直言,您的方法引入了几个不必要的概念(ostream_operator、copy),这些概念并不容易提倡高级 C++ 功能。
        • 实际上,+1。起初我以为问题是关于multimap,然后将答案更新为涵盖multiset,而没有切换到copyostream_iterator。不过,我确实同意@Vlad,您的中缀迭代器仅在编写和维护代码的 C++ 大师在场时才有用:)
        • @Vlad:我不能同意。事实上,我想说使用copy 的代码的整个 比单独定义std::multiset&lt;T&gt;::const_iterator 的代码更容易阅读、编写和理解。维护也更简单——考虑一下当用户决定尝试使用 unordered_multiset 时会发生什么。使用副本,无需更改。使用循环,您需要更改 每个 实例中最复杂的部分。
        • @larsmans:我不确定需要进行哪些维护——我不记得自从它被编写后就对其进行过一次更改。我不会期望维护它比维护std::ostream_iterator 更多。
        • @Jerry:想象一下你想以“1、2、3、4和5”的形式输出它的情况。普通开发人员是否能够相应地修改infix_ostream_operator?使用 for 循环不是很简单吗?另一个问题:我个人不将打印值与复制到特制的流迭代器相关联,因此与 copy/infix_ostream_operator 相比,for 循环直接反映了我的思维方式。我承认其他开发者的思维方式不同。
        【解决方案4】:

        C++11 的 auto 很方便。

           for(auto t : mlt){
                cout << t << endl;
            }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-10-16
          • 1970-01-01
          • 2017-11-06
          • 2021-08-23
          • 1970-01-01
          • 2020-06-03
          • 2017-12-19
          • 1970-01-01
          相关资源
          最近更新 更多