Копировать содержимое вектора в мультимножество - PullRequest
0 голосов
/ 20 апреля 2019

Я попытался скопировать содержимое 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 Ответ

1 голос
/ 20 апреля 2019

Однако, это копирует только индексы 0-32768, а не значения

Вы уверены?

На скриншоте, который вы сообщили, мне кажется, чтоу вас есть

0 1 3 4 6 6 6 ...

Подумайте немного, что вы получите, скопировав std::vector в std::multiset: вы получите тот же номер, переупорядоченный.

Таким образом, генерируя 32768 случайных чисел, выВы получили 0, a 1, no 2, a 3, a 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?

Как вы уже понимаете, все в порядке, насколько я понимаю.

...