值得一提的是,实现相同的插入操作,无论是用 emplace() 还是 emplace_hont(),都比 insert() 方法的效率高(后续章节会详细讲解)。
和 insert() 方法相比,emplace() 和 emplace_hint() 方法的使用要简单很多,因为它们各自只有一种语法格式。其中,emplace() 方法的语法格式如下:
template <class... Args>
pair<iterator,bool> emplace (Args&&... args);
#include <iostream> #include <map> //map #include <string> //string using namespace std; int main() { //创建并初始化 map 容器 std::map<string, string>mymap; //插入键值对 pair<map<string, string>::iterator, bool> ret = mymap.emplace("STL教程", "http://c.biancheng.net/stl/"); cout << "1、ret.iter = <{" << ret.first->first << ", " << ret.first->second << "}, " << ret.second << ">" << endl; //插入新键值对 ret = mymap.emplace("C语言教程", "http://c.biancheng.net/c/"); cout << "2、ret.iter = <{" << ret.first->first << ", " << ret.first->second << "}, " << ret.second << ">" << endl; //失败插入的样例 ret = mymap.emplace("STL教程", "http://c.biancheng.net/java/"); cout << "3、ret.iter = <{" << ret.first->first << ", " << ret.first->second << "}, " << ret.second << ">" << endl; return 0; }程序执行结果为:
1、ret.iter = <{STL教程, http://c.biancheng.net/stl/}, 1>
2、ret.iter = <{C语言教程, http://c.biancheng.net/c/}, 1>
3、ret.iter = <{STL教程, http://c.biancheng.net/stl/}, 0>
template <class... Args>
iterator emplace_hint (const_iterator position, Args&&... args);
#include <iostream> #include <map> //map #include <string> //string using namespace std; int main() { //创建并初始化 map 容器 std::map<string, string>mymap; //指定在 map 容器插入键值对 map<string, string>::iterator iter = mymap.emplace_hint(mymap.begin(),"STL教程", "http://c.biancheng.net/stl/"); cout << iter->first << " " << iter->second << endl; iter = mymap.emplace_hint(mymap.begin(), "C语言教程", "http://c.biancheng.net/c/"); cout << iter->first << " " << iter->second << endl; //插入失败样例 iter = mymap.emplace_hint(mymap.begin(), "STL教程", "http://c.biancheng.net/java/"); cout << iter->first << " " << iter->second << endl; return 0; }程序执行结果为:
STL教程 http://c.biancheng.net/stl/
C语言教程 http://c.biancheng.net/c/
STL教程 http://c.biancheng.net/stl/
那么,为什么 emplace() 和 emplace_hint() 方法的执行效率,比 insert() 高呢?下一节会做详细解释。
Copyright © 广州京杭网络科技有限公司 2005-2024 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有