C++ std::map如何确保所有指针都为空?

C++ std::map如何确保所有指针都为空?,c++,stl,std,stdmap,C++,Stl,Std,Stdmap,我正在实现一个类似于std的自定义映射类,但是我有一个问题 因此,我希望能够做到这一点: MyMap<string, SomeObject*> container; SomeObject* object = container["this doesn't exist"]; //and for this to definetely be nullptr 我有一个bool ContainsKey(键类型键)函数,但它涉及for循环。是否有某种方法可以确保在映射初始化时所需的内容,或者我

我正在实现一个类似于std的自定义映射类,但是我有一个问题

因此,我希望能够做到这一点:

MyMap<string, SomeObject*> container;
SomeObject* object = container["this doesn't exist"]; //and for this to definetely be nullptr

我有一个bool ContainsKey(键类型键)函数,但它涉及for循环。是否有某种方法可以确保在映射初始化时所需的内容,或者我必须制作一个自定义的pointerrapper,其中包含SomeObject的指针,该指针在pointerrapper的构造函数中设置为nullptr。我很难弄清楚std头中发生了什么,它们有大量的宏和typedef。

std::map
value初始化它在内部创建的任何新值。对于标量类型,这意味着它们被初始化为0。

std::map
value初始化它在内部创建的任何新值。对于标量类型,这意味着它们被初始化为0。

使用std::map当您引用一个不存在的条目时,它会创建一个条目并将其值设置为空。对于意味着将值设置为null的指针

使用std::map当您引用一个不存在的条目时,它会创建一个条目并将其值设置为空。对于意味着将值设置为null的指针

如果显式构造对象,则将初始化值(用于任何类型)

SomeObject* object = SomeObject*();
//                              ^^ Explicit construction
对于类,显然正在调用默认构造函数

对于内置类型,如
int
s和指针(如
SomeObject*
),它们将被零初始化(而不是未初始化)

因此,虽然您可以在特定的指针示例中使用
=NULL
,但这样的语法对于所有类型都是正确的

template < typename Key, typename Value >
void MyMap<Key, Value> add_new_key( const Key &k )
{
   std::pair<Key, Value>( k, Value() );
//                                ^^ Either calls constructor or zero-initializes

   // Store the data as you wish...
}
模板
void MyMap add_new_key(const key&k)
{
std::pair(k,Value());
//^^调用构造函数或零初始化
//根据需要存储数据。。。
}
如果显式构造对象,则将初始化您的值(用于任何类型)

SomeObject* object = SomeObject*();
//                              ^^ Explicit construction
对于类,显然正在调用默认构造函数

对于内置类型,如
int
s和指针(如
SomeObject*
),它们将被零初始化(而不是未初始化)

因此,虽然您可以在特定的指针示例中使用
=NULL
,但这样的语法对于所有类型都是正确的

template < typename Key, typename Value >
void MyMap<Key, Value> add_new_key( const Key &k )
{
   std::pair<Key, Value>( k, Value() );
//                                ^^ Either calls constructor or zero-initializes

   // Store the data as you wish...
}
模板
void MyMap add_new_key(const key&k)
{
std::pair(k,Value());
//^^调用构造函数或零初始化
//根据需要存储数据。。。
}

std::map
value初始化其值–请参阅获取standardese。检查键的典型方法是map::find(key)=结束,而不是检查默认值。您的问题有一个正常的解决方案。
std::map
value初始化其值–请参阅获取standardese。检查密钥的典型方法是map::find(key)=结束,而不是检查默认值。对你的问题有一个好的解决方案。
template < typename Key, typename Value >
void MyMap<Key, Value> add_new_key( const Key &k )
{
   std::pair<Key, Value>( k, Value() );
//                                ^^ Either calls constructor or zero-initializes

   // Store the data as you wish...
}