Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iterator>
- #include <vector>
- #include <set>
- #include <functional>
- #include <iostream>
- #include <list>
- struct A
- {
- A(int val) : num(val){}
- const int num;
- };
- struct B
- {
- B(const A& a) : num(a.num){};
- const int num;
- };
- void sortAndPrintViaSet(std::vector<B> vec)
- {
- std::cout << "SORT VIA SET\n=====================================\n";
- std::function<bool(const B&, const B&)> cmp = [](const B& l, const B& r){ return l.num < r.num; };
- std::set<B, decltype(cmp)> sortedDst(cmp);
- std::copy(vec.begin(), vec.end(), std::inserter(sortedDst, std::next(sortedDst.begin())));
- vec.clear();
- std::copy(sortedDst.begin(), sortedDst.end(), std::back_inserter(vec));
- for (const auto obj : vec)
- {
- std::cout << obj.num << std::endl;
- }
- std::cout << "=====================================\n" << std::endl;
- }
- void sortAndPrintViaList(std::vector<B> vec)
- {
- std::cout << "SORT VIA LIST\n=====================================\n";
- std::list<B> list;
- std::copy(vec.cbegin(), vec.cend(), std::back_inserter(list));
- list.sort([](const B& l, const B& r){ return l.num < r.num; });
- vec.clear();
- std::copy(list.cbegin(), list.cend(), std::back_inserter(vec));
- for (const auto obj : vec)
- {
- std::cout << obj.num << std::endl;
- }
- std::cout << "=====================================\n" << std::endl;
- }
- int main()
- {
- std::vector<A> src;
- src.emplace_back(1);
- src.emplace_back(3);
- src.emplace_back(2);
- std::vector<B> dst;
- std::copy(src.cbegin(), src.cend(), std::back_inserter(dst));
- sortAndPrintViaSet(dst);
- sortAndPrintViaList(dst);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement