将向量的内容复制到多集中

时间:2019-04-20 20:13:17

标签: stl c++17 stdvector stl-algorithm multiset

我尝试像这样将std::vector的内容复制到std::multiset中:

std::vector<unsigned> v(32768);
std::generate(v.begin(), v.end(), rand);

std::multiset<unsigned> m(v.begin(), v.end());

但是,它仅复制索引0-32768,而不复制值Contents of the multiset

如何将std::vector中的值复制到std::multiset中?

1 个答案:

答案 0 :(得分:1)

  

但是,仅复制索引0-32768,而不复制值

确定吗?

在您报告的屏幕快照中,在我看来您拥有

0 1 3 4 6 6 6 ...

稍微想一想,将std::vector复制到std::multiset中会得到什么:重新获得相同的数字。

因此,生成32768个随机数,您已经获得了0、1、1、2、3、4、3或更多的6。

向量中的位置确实不同;在多集中,它们是开头,因此您可以认为您已复制了索引。

建议:尝试减少所生成数字的数量(例如,用16代替32768),并在矢量生成和多集复制后打印它们两者。

以下内容

#include <algorithm>
#include <iostream>
#include <vector>
#include <set>


int main ()
 {
   std::vector<unsigned> v(16);
   std::generate(v.begin(), v.end(), rand);

   std::multiset<unsigned> m(v.begin(), v.end());

   for ( auto const & ui : v )
      std::cout << ui << ' ';

   std::cout << std::endl;

   for ( auto const & ui : m )
      std::cout << ui << ' ';

   std::cout << std::endl;
 }

运行它我得到

1804289383 846930886 1681692777 1714636915 1957747793 424238335 719885386 1649760492 596516649 1189641421 1025202362 1350490027 783368690 1102520059 2044897763 1967513926 
424238335 596516649 719885386 783368690 846930886 1025202362 1102520059 1189641421 1350490027 1649760492 1681692777 1714636915 1804289383 1957747793 1967513926 2044897763

在我看来这是绝对合理的。

  

如何将std :: vector中的值复制到std :: multiset中?

据我了解,您已完成操作。