如何更简洁地将string类型vector元素插入unordered_multiset?
嘿,当然有更简洁的实现方式啦!你的代码逻辑完全没问题,但C++标准库提供了更顺手的工具来简化这类容器初始化操作,咱们来看看两种常用的简洁写法:
1. 利用unordered_multiset的范围构造函数
C++的关联容器(包括unordered_multiset)都支持范围构造特性,可以直接把vector的整个元素范围传递给构造函数,一步完成集合的初始化,完全不用手动写循环:
unordered_multiset<string> magazine_set(magazine.begin(), magazine.end());
这种方式是最简洁的写法,而且标准库的底层实现经过优化,效率和你手动写循环不相上下,代码的可读性还更高。
2. 用范围for循环简化手动插入
如果你因为某些原因需要分开声明集合和插入元素(比如之后还要往集合里添加其他内容),可以用C++11引入的范围for循环替代传统的迭代器循环,代码会清爽很多:
unordered_multiset<string> magazine_set; for (const auto& str : magazine) { magazine_set.insert(str); }
这里用const auto&可以避免不必要的字符串拷贝,比你原来的迭代器写法更直观,减少了解引用迭代器的冗余代码。
这两种写法都能达到和你原代码完全一致的效果,而且代码更简洁易读,推荐优先使用第一种范围构造的方式,除非有特殊的分步操作需求。
内容的提问来源于stack exchange,提问作者Sero Mirzakhanyan
相关产品推荐
相关产品推荐

