structval() 是什么意思?这是访问结构并将其成对放置的有效方法吗?
structval()
实例化一个临时对象类型structval
。因此,从技术上讲,它不是访问 struct的方法,而是创建它的实例。是的,这是创建对象实例的有效方法:
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
(顺便说一下,您正在构造的对对象也是临时的!)。
通常,pairs 是通过调用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()
为此目的调用)。
最后,地图的值类型不是:
pair<key_type, mapped_type>
反而:
pair<key_type const, mapped_type>
// ^^^^^
因为地图的键永远不能改变,以防止弄乱容器的内部顺序。