当我将向量插入无序地图时,向量的容量为 0

Posted

技术标签:

【中文标题】当我将向量插入无序地图时,向量的容量为 0【英文标题】:capacity of vector is 0 when i am inserting it into an un-ordered map 【发布时间】:2020-01-14 06:00:51 【问题描述】:

我保留了一个大小为 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;

【问题讨论】:

看看这个:***.com/q/37639386/1870232 【参考方案1】:

make_pair 将复制构造 (6) 一个新向量 which does not retain the capacity。

您也可以通过使用std::move 强制移动构造函数(7) 和does retain capacity,但这会过于复杂。

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

我建议您在构造向量时简单地保留大小,而不是保留容量。

std::vector<int> a(40);

【讨论】:

【参考方案2】:

构造std::vector 的副本不需要保留构造它的对象的容量。只需要保存内容即可。

来自https://en.cppreference.com/w/cpp/container/vector/vector:

复制构造函数。用 other 的内容的副本构造容器。

【讨论】:

以上是关于当我将向量插入无序地图时,向量的容量为 0的主要内容,如果未能解决你的问题,请参考以下文章

无法将元素插入到列表的向量中

为啥在达到容量后在向量中进行插入时,C++ 不处理迭代器?

在 C++ 中,在地图中插入一个向量

插入向量变换

可以乱序插入向量吗?

将元素插入已排序的向量中