gpt4 book ai didi

c++ - 是否可以从 map 中的键初始化 vector ?

转载 作者:可可西里 更新时间:2023-11-01 18:20:04 30 4
gpt4 key购买 nike

How to retrieve all keys (or values) from a std::map and put them into a vector?涵盖了从 C++11 之前的映射中的键填充 std::vector 的方法。

有没有一种方法可以在 C++11 中使用 lambda 等来做到这一点,这意味着我们可以在一行中完成,这样我们就可以从映射中初始化 vector ,而不是创建一个 vector 并在 2 个 Action 中填充它?

例如vector<int> v(???(m.begin(),m.end()));

纯 C++11 是首选,但 boost 是可以接受的...目的是在一行中完成此操作,而不会过于复杂和“炫耀”,因此不会让其他开发人员感到困惑。

为了比较,“明显的”C++11 解决方案是:

vector<int> v;
v.reserve(m.size()); //not always needed
for(auto &x : map)
v.push_back(x.first)

最佳答案

使用boost::adaptor::map_keys在 Boost.Range 中。

#include <iostream>
#include <vector>
#include <map>
#include <boost/range/adaptor/map.hpp>

int main()
{
const std::map<int, std::string> m = {
{1, "Alice"},
{2, "Bob"},
{3, "Carol"}
};

auto key_range = m | boost::adaptors::map_keys;
const std::vector<int> v(key_range.begin(), key_range.end());

for (int x : v) {
std::cout << x << std::endl;
}
}

输出:

1
2
3

关于c++ - 是否可以从 map 中的键初始化 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25402682/

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