Class Base {
public:
std::map<std::string, std::string> animals;
};
Run Code Online (Sandbox Code Playgroud)
以下哪一项是实例化std :: map <>的正确方法?
Derived::Derived() {
animals["Rabbit"] = "Killer Rabbit";
//or
animals.insert( std::pair<std::string,std::string>("Rabbit","Killer Rabbit") );
}
Run Code Online (Sandbox Code Playgroud)
在函数内部,你应该这样做:
animals["Rabbit"] = "Killer Rabbit";
Run Code Online (Sandbox Code Playgroud)
或这个:
animals.insert(std::make_pair("Rabbit", "Killer Rabbit"));
Run Code Online (Sandbox Code Playgroud)
在C++ 11中,后面的形式可以缩短为:
animals.insert({"Rabbit", "Killer Rabbit"});
Run Code Online (Sandbox Code Playgroud)
C++ 11还提供了另一种可能性,它将就地构建对:
m.emplace("test1", "t2");
Run Code Online (Sandbox Code Playgroud)
正如shakurov在评论中正确提到的那样,第一种形式与其余形式之间的主要区别在于,"Rabbit"
如果已存在,则第一种形式将覆盖与该键相关联的值,而其他形式则不会.
此外,正如Dave S所指出的那样- 在评论中 - 第一个形式默认 - 构造值并稍后分配它,而其他三种形式则不然.
归档时间: |
|
查看次数: |
3698 次 |
最近记录: |