gpt4 book ai didi

c++ - 一个用于插入类对象的某些特定值的衬里

转载 作者:可可西里 更新时间:2023-11-01 16:26:15 26 4
gpt4 key购买 nike

假设我有一个 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 在评论中提出改进建议。

关于c++ - 一个用于插入类对象的某些特定值的衬里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52498797/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com