繁体   English   中英

迭代C ++中列表中一对(或元组)的特定项

[英]Iterating over specific items of a pair (or tuple) in a list in C++

说我有类似的东西:

using MyList = std::list<std::pair<string,int>>;

如何才能获得列表的字符串(或整数)的迭代器? 我有一个函数我想传递一些 .begin()和一些 .end()只是整数。 有一个简单/聪明/光滑的方式来做到这一点? 它也可以用元组完成吗?

有Boost的transform_iterator

using MyList = std::list<std::pair<string,int>>;

MyList l{ {"Hello", 42}, {"World", 0} };

auto tr = [](auto const& p){
    return p.first;
};

copy(boost::make_transform_iterator(l.begin(), tr),
     boost::make_transform_iterator(l.end(), tr),
     ostream_iterator<string>(cout, ", "));

实例

使用range-v3 ,你可以做类似的事情

std::list<std::pair<std::string, int>> pairs = {{"John", 2}, {"Hello", 42}};

auto names = pairs | ranges::view::keys;
auto ints = pairs | ranges::view::values;
auto doubleInts = pairs | ranges::view::transform([](const auto& p){ return 2 * p.second; };

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM