gpt4 book ai didi

c++ - 以最通用的形式将 map 的第一个元素存储到 vector 中。最佳解决方案

转载 作者:行者123 更新时间:2023-11-28 01:11:00 26 4
gpt4 key购买 nike

我的目标是将 map (第一项)的所有键存储到 vector 中,我正在执行以下操作。

    template < class vecDet>
class storeInto
{
public:
storeInto(vecDet& source) : VectorInfo(source) { }
~storeInto();
template <class pairdet>
void operator()(pairdet& pairinfo)
{
VectorInfo.push_back(pairinfo.first);
}

private:
vecDet& VectorInfo;
};
template<class mapDet, class vecDet>
void storeMapToVector(const mapDet& mapContA, vecDet& vecContA)
{
for_each(mapContA.begin(), mapContA.end() , storeInto<vecDet>(vecContA));
}

最后,在我的主程序中,我按如下方式调用 storeMapToVector()

storeMapToVector<mapinfo,vector<char> >(mapContents, vecContents);

其中mapinfo声明如下

typedef map<char,int> mapinfo;

有更好的方法吗?这有什么问题吗?

最佳答案

您的代码乍一看似乎可以正常工作。但是,有一种更简单的方法可以做到这一点:

我没有评估过你的代码,但肯定有一种更简单的方法来做你想内置到大多数 STL 实现中的事情:

vecContents.resize(mapContents.size());
std::transform(mapContents.begin(), mapContents.end(), vecContents.begin(),
select1st<pair<const char, int> >());

或者:

vecContents.resize(mapContents.size());
std::transform(mapContents.begin(), mapContents.end(), vecContents.begin(),
select1st<mapinfo::value_type>());

虽然有 1 个问题 - select1st 是一个 SGI 扩展。它几乎存在于每个 STL 实现中,但在不同的地方。对于 GNU,你必须这样做:

#include <ext/functional>

using __gnu_cxx::select1st; // or just using namespace __gnu_cxx;

有关在 Visual Studio 中使用它的信息,请参阅 this answer

关于c++ - 以最通用的形式将 map 的第一个元素存储到 vector 中。最佳解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3260517/

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