mp[key].emplace_back(str);
时间: 2024-06-13 15:03:56 浏览: 20
这段代码是将字符串按照字母顺序排序后作为key,原字符串作为value存入一个map中。当遍历到一个新的字符串时,先将其排序后得到key,然后将原字符串作为value加入到对应的key所对应的vector中,使用的是emplace_back方法。与push_back不同的是,emplace_back可以直接在vector的末尾构造一个对象,而不需要进行复制或移动操作,因此效率更高。
相关问题
.emplace_back
.emplace_back是C++中vector容器的一个成员函数,它在插入元素时通过完美转发实现了在容器内直接构造对象的功能,省略了创建临时对象的操作。与push_back相比,emplace_back避免了额外的复制或移动操作。
具体来说,emplace_back函数接受任意数量的参数,并将这些参数完美转发给容器内的元素的构造函数。如果vector容器有足够的未使用的容量,emplace_back将在未使用的容量中直接构造对象。否则,它将重新分配更大的内存空间并构造对象。
需要注意的是,虽然emplace_back可以像push_back一样传入要插入的对象(而不是构造对象的参数),但它仍然会构造一个新对象。因此,即使使用emplace_back,如果传入的是左值引用,仍然会比较耗时。不过从实验结果来看,这种用法的性能至少不会比push_back更差。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [C++ 中”emplace_back” 与 “push_back” 的区别](https://download.csdn.net/download/weixin_38548704/13997185)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *2* *3* [C++的emplace_back函数介绍](https://blog.csdn.net/Jason_Lee155/article/details/125253860)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
C++ .emplace_back函数
C++中的`.emplace_back()`函数是从C++11起新增到vector中的方法,它可以在vector的末尾直接构造一个元素,而不需要先构造一个临时对象再将其拷贝或移动到vector中。`.emplace_back()`函数的函数声明为:`template<class... Args> void emplace_back( Args&&... args );`,它可以接受任意数量和类型的参数,并将这些参数传递给元素的构C++11中的emplace_back函数是STL容器vector的一个成员函数,它可以在vector的末尾直接构造一个元素,而不需要先创建对象再添加。与push_back函数不同,emplace_back函数可以直接传递构造函数的参数,而不需要先创建一个对象。这样可以避免不必要的拷贝和移动操作,提高程序的效率。同时,emplace_back函数还支持可变参数模板,可以传递任意数量和类型的参数。
举个例子,假设我们有一个结构体Youbain,它有三个成员变量:_contry、_privence和_number。我们可以使用emplace_back函数来向vector中添加一个Youbain对象,如下所示:
```
vector<Youbain> el;
el.emplace_back("China", "Shannxi", 610000);
```
这样就可以直接在vector的末尾构造一个Youbain对象,而不需要先创建一个对象再添加。同时,我们还可以使用push_back函数来添加一个Youbain对象,如下所示:
```
el.push_back(Youbain("China", "Beijing", 10000));
```
这样就需要先创建一个Youbain对象,再将其添加到vector中。可以看到,使用emplace_back函数可以避免不必要的拷贝和移动操作,提高程序的效率。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)