c++ - 一种用于插入类对象的某些特定值的衬垫
问题描述
假设我有一个vector<int> myVec;
并且我想将它转换为一个集合,我可以有一个衬里-
set<int> mySet(myVec.begin(), myVec.end());
这是很容易找到的。
现在我有了vector<pair<int, int>>
,并且我想获得每对中的第二个值的集合。我应该如何使用集合构造函数来实现这一点?可能吗?
假设我有 C++11、C++14、C++17。
另外,如果我能获得一些关于如何对不同容器进行一般意义上的类似调整的信息,我将不胜感激。
解决方案
在这种情况下要求单线不可避免地会导致使用range-v3的解决方案:
#include <range/v3/view/map.hpp>
const std::vector<std::pair<int, int>> myVec{{1, 10}, {2, 20} , {3, 30}};
const std::set<int> mySet = myVec | ranges::view::values;
以及使用Boost range ¹的类似方法:
#include <boost/range/adaptor/map.hpp>
using boost::adaptors::map_values;
const auto mySet = boost::copy_range<std::set<int>>(myVec | map_values);
但是,您可能认为这种方法最简单(不需要库,但需要 C++17):
for (const auto& [first, second] : myVec)
mySet.insert(second);
¹ 感谢@Caleth 建议改进评论。
推荐阅读
- python - 找不到命令:导入python
- c - C程序循环来回控制led灯
- wordpress - 将请求代理到子文件夹时,无法在 wordpress 中使用自定义永久链接
- javascript - 将 Javascript 浮点数舍入为 2 位十进制数字
- android - 如何在 Kotlin 中禁止 Android EditText 中的“00”或“0123-like”输入开始?
- python-3.x - 如何动态调用类实例属性?
- python - 使用 Pyramid,在添加路由后使用 route_url
- python - 从 Python 数据类装饰器中的 __repr__ 方法中删除引号
- java - 在 actionperformed 中创建 JDialog
- mongodb - Next.js + Apollo + Mongodb:在 SSR 模式下无法访问 Apollo 上下文