gpt4 book ai didi

c++ - 如何从 std::map 中检索所有键(或值)并将它们放入 vector 中?

转载 作者:IT老高 更新时间:2023-10-28 11:26:49 25 4
gpt4 key购买 nike

这是我出来的可能方式之一:

struct RetrieveKey
{
template <typename T>
typename T::first_type operator()(T keyValuePair) const
{
return keyValuePair.first;
}
};

map<int, int> m;
vector<int> keys;

// Retrieve all keys
transform(m.begin(), m.end(), back_inserter(keys), RetrieveKey());

// Dump all keys
copy(keys.begin(), keys.end(), ostream_iterator<int>(cout, "\n"));

当然,我们也可以通过定义另一个仿函数RetrieveValues从 map 中检索所有值。

还有其他方法可以轻松实现吗? (我一直想知道为什么 std::map 不包含一个成员函数供我们这样做。)

最佳答案

虽然您的解决方案应该有效,但根据您的程序员同事的技能水平,它可能难以阅读。此外,它将功能从调用站点移开。这会使维护变得更加困难。

我不确定您的目标是将 key 放入 vector 中还是将它们打印到 cout 中,所以我两者都做。你可以试试这样的:

std::map<int, int> m;
std::vector<int> key, value;
for(std::map<int,int>::iterator it = m.begin(); it != m.end(); ++it) {
key.push_back(it->first);
value.push_back(it->second);
std::cout << "Key: " << it->first << std::endl();
std::cout << "Value: " << it->second << std::endl();
}

或者更简单,如果您使用的是 Boost:

map<int,int> m;
pair<int,int> me; // what a map<int, int> is made of
vector<int> v;
BOOST_FOREACH(me, m) {
v.push_back(me.first);
cout << me.first << "\n";
}

就我个人而言,我喜欢 BOOST_FOREACH 版本,因为打字更少,而且它的作用非常明确。

关于c++ - 如何从 std::map 中检索所有键(或值)并将它们放入 vector 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/110157/

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