如何使用stl算法有效地修改这两个列表的元素:
std::list<std::pair<double, string> > listPair(10);
std::list<double> listA(10);
以这种方式,第一个pair-element从listA获得相应的double值?
答案 0 :(得分:3)
尝试使用C ++ 11 lambdas
#include <algorithm>
#include <list>
#include <string>
#include <utility>
int main()
{
std::list<std::pair<double, std::string> > listPair(10);
std::list<double> listA(10);
// original question: assign double of listA to listPair
std::transform(
listA.begin(), listA.end(), listPair.begin(), listPair.begin(),
[](double d, std::pair<double, std::string> const& p) {
return std::make_pair(d, p.second);
}
);
// other way around: assign double from listPair to listA
std::transform(
listPair.begin(), listPair.end(), back_inserter(listA),
[](std::pair<double, std::string> const& p) {
return p.first;
}
);
return 0;
}
答案 1 :(得分:3)
这里我假设listPair
已经填充,因为否则无法获得该字符串。
您可以直接遍历集合。
auto a_cur = listA.begin(), a_end = listA.end();
auto pair_cur = listPair.begin();
for (; a_cur != a_end; ++ a_cur, ++ pair_cur) {
pair_cur->first = *a_cur;
}
或使用std::transform
的“二进制”版本,但这将涉及复制字符串:
std::transform(listA.begin(), listA.end(), listPair.begin(), listPair.begin(),
[](double a, std::pair<double, string> b) {
return std::make_pair(a, b.second);
});