【问题标题】:Copy contents of a vector into a multiset将向量的内容复制到多重集中
【发布时间】:2019-04-20 20:13:17
【问题描述】:
我尝试将 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 而不是值
如何将std::vector 中的值复制到std::multiset 中?
【问题讨论】:
标签:
stl
c++17
stdvector
stl-algorithm
multiset
【解决方案1】:
但是,这只会复制索引 0-32768 而不是值
你确定吗?
从你报告的截图来看,在我看来你有
0 1 3 4 6 6 6 ...
想想你在std::multiset 中复制std::vector 得到了什么:你会得到相同的号码重新排序。
所以生成32768个随机数,你得到了一个0,一个1,没有2,一个3,一个4,三个或更多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 中?
据我所知,你已经完成了。