емкость вектора равна 0, когда я вставляю его в неупорядоченную карту - PullRequest
0 голосов
/ 14 января 2020

Я зарезервировал вектор размером 40, но когда я вставил его в неупорядоченную карту как пару, тогда емкость вектора становится равной 0. Почему это так?

#include<vector> 
#include <iostream>
#include <unordered_map>
using namespace std;

int main() {
   std::vector<int> a;
   a.reserve(40);
   std::cout<<a.capacity()<<std::endl;

   std::unordered_map<int,vector<int>> _map;
   _map.insert(std::make_pair(1,a));
   std::cout<<_map[1].capacity()<<std::endl;



    return 0;
}

Ответы [ 2 ]

3 голосов
/ 14 января 2020

make_pair скопирует конструкт (6) новый вектор, , который не сохраняет емкость .

Вы также можете вместо этого принудительно заставить конструктор перемещения (7) , который сохраняет емкость , используя std::move, но это будет слишком сложно.

_map.insert(std::make_pair(1, std::move(a)));

Вместо того, чтобы резервировать емкость, я бы посоветовал вам просто зарезервировать размер в точке построения вектора.

std::vector<int> a(40);
1 голос
/ 14 января 2020

Созданная копия std::vector не требуется для сохранения емкости объекта, из которого создана копия. Требуется только сохранить содержимое.

С https://en.cppreference.com/w/cpp/container/vector/vector:

Копировать конструктор. Создает контейнер с копией содержимого др.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...