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

capacity of vector is 0 when i am inserting it into an un-ordered map

本文关键字:容量 插入 地图 无序      更新时间:2023-10-16

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

make_pair将复制构造 (6( 一个新向量,该向量不保留容量。

您也可以改为强制移动构造函数 (7(,该构造函数确实通过使用std::move保留容量,但这过于复杂。

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

与其保留容量,我建议您在构建向量时简单地保留大小。

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

的副本不需要保留从中构造它的副本的对象的容量。只需要保留内容。

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

复制构造函数。使用其他内容的副本构造容器。