Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 映射检查映射是否被分配了非默认值?_C++_Std_Stdmap - Fatal编程技术网

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个元素,为什么首先要添加这些元素?