map检查map是否被分配了非默认值
std::map check if a map has been assigned a non-default value?
假设我有一个复杂的映射,定义为
std::map<int, std::pair< vector<int>, float> > complex_map;
假设这个映射初始化为
for (int k=0;k<5;k++)
{
std::pair< vector<int>, float> complex_map_child;
complex_map[k]=complex_map_child;
}
接下来,我填充这个映射的一些条目:
float test_1 = .7888;
vector<int> test_2;
test_2.push_back(1);
test_2.push_back(2);
complex_map[1].first = test_2;
complex_map[1].second = test_1;
对应complex_map的键值1,我有一对对应test_1和test_2的值
现在我如何检查是否显式地向映射添加了值?例如,在这个例子中,我怎么说我没有显式地填充比如complex_map[0]?
看起来你使用std::map::operator[]
不正确,并试图去它-你得到这样的对象:
auto &complex_value = complex_map[0];
,现在你试着检查它是之前插入的还是std::map::operator[]
隐式创建的
不要使用std::map::operator[]
访问元素。只在需要在映射中设置值时使用。
所以正确的解决办法是使用不同的方法:
// I just want to check if key 0 is there
if( complex_map.count( 0 ) ) {
...
}
// I want to access element by key 0 if it is there
auto it = complex_map.find( 0 );
if( it != complex_map.end() ) {
auto &complex_value = it->second;
...
}
等等。我知道写complex_map[0]
更短,但你正在创造一个问题,试图解决复杂的方式。
现在我如何检查是否显式地向映射添加了值?例如,在这个例子中,我怎么说我没有显式地填充比如complex_map[0]?
如果"显式"的意思是你想找到在执行complex_map[k]=complex_map_child;
的初始化循环之后写入的元素,那么:
-
您可以将地图中的值与
complex_map_child
进行比较,看看它们是否相等 -
你可以不检测如果一个地图条目被写入相同的值,或改变然后恢复(除非你改变数据类型跟踪自己,或添加一些额外的簿记以外的
map
自己)
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 具有默认值的引用获取函数
- 当给定默认值时,为什么此模板参数推导失败
- 从具有默认值的部分指定模板类继承时发生SWIG错误,具有不带默认值的正向声明
- 格式化浮点值:返回默认值
- 如何将数组部分初始化为某个默认值?
- asn1c 不会从 asn.1 模块中提取八位字节字符串的默认值
- 创建一个包含 c++ 默认值的环境文件
- C++(和 ROS) - 包含与前向声明引用,设置默认值和类型定义
- Makefile g++ 使用命令行中的 -D 变量进行编译,默认值
- Switch 语句(字符串)一直选择默认值,除非其为零
- 如何使用默认值将枚举声明为 extern
- 如何在提升程序选项中设置矢量<矢量>的默认值<string>
- 如何使用默认值为构造函数中的枚举赋值?
- 变量始终在函数中重置为默认值
- 如何在 c++ 中使用默认值将 std::set 转换为 std::map
- 新的STD :: MAP条目中指针的默认值
- C ++多个CIN默认值(如果未输入),则添加到map<string,vector<double>>
- map检查map是否被分配了非默认值
- 为什么不能为类型的函数参数设置默认值<map>?