我已经阅读了C++引用中关于 map 插入的内容,并在示例中显示了以下代码
std::map<char,int> mymap;
mymap.insert (it, std::pair<char,int>('b',300));
同时我看到了类似操作的代码
mymap.insert( pair<uuid,structval>( (*it).first, structval() ) );
structval本身被声明为正常结构
struct structval {
//some params
};
谁能解释一下为什么要启动一对structval,而我们可以通过使用structval()操作简单地调用该结构?那里的structval()是什么意思?这是访问结构并将其成对放置的有效方法吗?
谢谢
最佳答案
structval()
实例化类型为structval
的临时对象。因此,从技术上讲,它不是访问结构的方法,而是创建它的实例的方法。是的,这是创建对象实例的有效方法:
struct X
{
X() : i_(42) { }
int i_;
};
void foo(X x) { /* ... */ }
// ...
foo(X()); // <== Valid way to construct a temporary object
// of type X and pass it as an argument to
// the foo() function.
然后,该临时的,默认构造的实例作为参数传递给
std::pair
的构造函数(顺便说一句,您正在构造的对对象也是临时的!)。通常,对是通过调用
std::make_pair()
函数构造的,该函数可以为您推断参数的类型,因此您不必显式地键入它们。因此,您可以将其重写为:pair<uuid,structval>( (*it).first, structval() )
如下:
std::make_pair((*it).first, structval())
在C++ 11中,您还可以使用
emplace
成员函数代替insert()
:mymap.emplace((*it).first, structval());
这样就不必显式构造该对(或为此目的调用
std::make_pair()
)。最后, map 的值类型不是:
pair<key_type, mapped_type>
反而:
pair<key_type const, mapped_type>
// ^^^^^
因为永远不要更改 map 的键,以免弄乱容器的内部顺序。
关于c++ - 在C++中插入要配对的结构的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16166012/