gpt4 book ai didi

c++ - 如何在不复制的情况下传输列表中 map 的内容

转载 作者:行者123 更新时间:2023-11-30 01:23:22 31 4
gpt4 key购买 nike

我有一个 map<double, vector<double>>myMap那是相当大的。我想把myMap[.].second的内容在list<vector<double> >vector<vector<double> > .是否可以在不显式复制每个 vector 的情况下做到这一点元素 ?我希望它可以用 iterators 实现

#include <iostream>
#include <vector>
#include <map>
using namespace std;

int main()
{
double v_value[] = {1.1,2.4};
vector<double> v(v_value, v_value + sizeof(v_value)/sizeof(double));

map<double,vector<double> > myMap;
myMap[10.01] = v;
myMap[14.62] = v;
}

最佳答案

在 c++03 中,您可以对映射中的每个 vector 使用 std::vector::swap,将其转换为列表中的空 vector 。在 C++11 中,您可以从一个移动到另一个。两者都避免了复制,但显然修改了源映射。

std::map<double, vector<double> > m = ....;
std::list<std::vector<double> > l(size_of_map); // list full of empty vectors
// iterate over map
typedef std::map<double, vector<double>>::iterator map_iter;
size_t list_counter = 0;
for(map_iter it = m.begin(); it != m.end(); ++it) {
l[list_counter].swap(it->second);
++list_counter;
}

在 C++11 中:

std::map<double, vector<double>> m = ....;
std::list<std::vector<double>> l; // empty list

for(auto it = m.begin(); it != m.end(); ++it) {
l.push_back(std::move(it->second));
}

关于c++ - 如何在不复制的情况下传输列表中 map 的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15140425/

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