C++ 映射检查映射是否被分配了非默认值?
假设我有一个定义为C++ 映射检查映射是否被分配了非默认值?,c++,std,stdmap,C++,Std,Stdmap,假设我有一个定义为 std::map<int, std::pair< vector<int>, float> > complex_map; std::map>complex\u map; 假设我将此映射初始化为 for (int k=0;k<5;k++) { std::pair< vector<int>, float> complex_map_child; complex_map[k]=complex_ma
std::map<int, std::pair< vector<int>, float> > complex_map;
std::map>complex\u map;
假设我将此映射初始化为
for (int k=0;k<5;k++)
{
std::pair< vector<int>, float> complex_map_child;
complex_map[k]=complex_map_child;
}
for(int k=0;k复数映射子;
复数映射[k]=复数映射子;
}
接下来,我填充此地图的一些条目:
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;
float test_1=.7888;
病媒试验2;
测试2.推回(1);
测试2.推回(2);
复杂的_映射[1]。第一个=测试_2;
复数映射[1]。秒=测试1;
所以对应于复数_映射的键值1,我有一对对应于test_1和test_2的值
现在,我如何检查我是否已经显式地向映射添加了值?例如,在本例中,我如何说我没有显式地填充say complex_map[0]
现在,我如何检查我是否已经显式地向映射添加了值?例如,在本例中,我如何说我没有显式地填充say complex_map[0]
如果“显式”表示要查找在执行complex\u-map[k]=complex\u-map\u-child;
的初始化循环之后写入的元素,则:
- 您可以将映射中的值与
进行比较,查看它们是否相等complex\u map\u child
- 您无法检测映射条目是否使用相同的值写入,或者是否更改然后还原(除非您将数据类型更改为跟踪其自身的数据类型,或者在
之外添加一些额外的簿记)映射
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]
较短,但您正在创建一个试图以复杂方式解决的问题。我不明白您在问什么。更改以更好地反映问题!现在我如何检查是否已向映射显式添加值?或者它们是否处于原始初始化状态?
?当您装箱映射时,映射中没有值。你是想问如何判断映射中是否存在某个键?可能是map::insert,它返回一对,其中bool表示插入(更改),你必须更好地定义“默认”的含义。如果你不想添加0-4个元素,为什么首先要添加这些元素?