c++ - 为什么将 std::make_pair 传递给 map::insert 不起作用?
问题描述
我在玩一个 C++ API,它返回一个const std::vector<uint8_t>&
. 我尝试将其存储到 astd::map
中以供进一步使用,并注意到由于const
对象的性质,我无法将其分配给带有[]
. 所以,我改用了,但是当函数被直接调用到函数中而没有任何临时变量时,我insert
遇到了一个奇怪的行为。std::make_pair()
insert
#include <vector>
#include <iostream>
#include <map>
#include <string>
#include <utility>
int main(){
std::map<const std::string, const std::vector<uint8_t>&> vectest;
std::vector<uint8_t> val1 = {0x0, 0x1};
std::vector<uint8_t> val2 = {0x0, 0x1};
std::vector<uint8_t> val3 = {0x0, 0x1};
std::string key1 = "test1";
std::string key2 = "test2";
std::string key3 = "test3";
auto pair = std::make_pair(key1, val1);
vectest.insert(pair);
vectest.insert(std::make_pair(key2, val2));
vectest.insert(std::make_pair(key3, std::cref(val3)));
std::cout<<"test size map : "<<vectest.at(key1).size()<<std::endl;
std::cout<<"test size map : "<<vectest.at(key2).size()<<std::endl;
std::cout<<"test size map : "<<vectest.at(key3).size()<<std::endl;
}
这是输出:
test size map : 2
test size map : 0
test size map : 2
我在某个地方读到了std::make_pair
可能不支持引用的地方,而我应该使用它the std::cref(val2)
。但我根本不明白引擎盖下发生了什么。
有谁知道这里发生了什么?
解决方案
推荐阅读
- c# - 使用 C# 在现有 XML 中添加元素
- php - 如何按 WooCommerce 管理订单列表中的自定义列值排序?
- java - 获取spring boot jar中资源文件夹的路径
- r - 我正在尝试将大型 csv 按行拆分为单独的 .txt 文件,在 R 中的每个 .txt 中都有一个标题
- firebase - Firebase LatLng 中的 Google 地图标记未出现在地图上
- c# - Firebird 2.5 的 EF Core 编码
- c++ - 如何创建数字的循环范围C ++
- python-3.x - 我正在尝试将 pygame 安装到 PyCharm 中,但由于某种原因,我不断收到 ERROR: Command errored out with exit status 1:
- recaptcha - 验证码 v3 问题
- ruby-on-rails - access_by 调用不能与块“可以”定义一起使用