gpt4 book ai didi

algorithm - 将 std::map 复制到 C++ 中的 std::set

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:40:01 26 4
gpt4 key购买 nike

是否可以使用 STL 算法将 std::map 值深度复制到 std::set?

我不想在新集合中显式插入。

不想明确地这样做:

std::map<int, double*> myMap; //filled with something
std::set<double*> mySet;

for (std::map<int, double*>::iterator iter = myMap.begin(); iter!=myMap.end(); ++iter)
{
mySet.insert(iter->second);
}

但要找到一种更简洁、更优雅的方式来做到这一点,并深入复制值。

最佳答案

这个呢?

std::transform(myMap.begin(), myMap.end(), std::inserter(mySet, mySet.begin()),
[](const std::pair<int, double*>& key_value) {
return key_value.second;
});

不过,这只会复制指针。如果你想要一个深拷贝,那么你需要做:

std::transform(myMap.begin(), myMap.end(), std::inserter(mySet, mySet.begin()),
[](const std::pair<int, double*>& key_value) {
return new double(*key_value.second);
});

顺便说一句,代码使用了 lambda 函数(仅适用于 C++11)。如果你不能使用 C++11,你可以使用 function object , 不过。

关于algorithm - 将 std::map 复制到 C++ 中的 std::set,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10916728/

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