[英]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.