Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
typedef std::multiset<int, std::function<bool(int,int)>> Set;
Set set0([](int a, int b){ return a < b; });
Set set1([](int a, int b){ return a > b; });
Set sets[] = {set0, set1};
for (size_t i = 0; i < 2; ++i) {
for (auto const& val: sets[i]) {
}
}
Set set0(bind(less<int>(), _1, _2));
Set set1(bind(less<int>(), _2, _1));
Set set0(less<int>());
Set set1(greater<int>());
typedef std::multiset<int, std::function<bool(int,int)>> Set4;
Set4 sets4[N] = {Set4(std::less<int>()), Set4(std::bind(std::less<int>(), _2, _1))};
typedef std::multiset<int, std::function<bool(int const&, int const&)>> Set4;
Set4 sets4[N] = {Set4(std::less<int>()), Set4(std::bind(std::less<int>(), _2, _1))};
my_multiset_compiletime<ASCENDING> ac;
my_multiset_compiletime<DESCENDING> dc;
my_multiset_runtime ar(ASCENDING);
my_multiset_runtime dr(DESCENDING);
ac.insert(1); ac.insert(3); ac.insert(2); // {1,2,3}
// поскольку между разнотипными мультисетами нет оператора присваивания, - явно копируем данные
// ну или, если мы делаем свой класс мультисета, то пишем шаблонный оператор присваивания...
ar.insert(ac.begin(), ac.end()); // {1,2,3}
dc.insert(ac.begin(), ac.end()); // {3,2,1}
// а вот между отнотипными - оператор присваивания есть из коробки
dr = ar; // {1,2,3}, заодно скопировали настройки компаратора!!!
#include <boost/range/adaptor/reversed.hpp>
.....
std::multiset<int> ms;
for(auto i : ms) { ..... }
for(auto i : boost::adaptors::reverse(ms)) { ..... }
#include <iostream>
#include <set>
#include <algorithm>
using namespace std;
int main()
{
multiset<int> set0 = { 0, 1, 2 };
multiset<int> set1 = { 3, 4, 5 };
auto& process = [&](int n) {
cout << n << ' ';
};
for_each(set0.begin(), set0.end(), process);
for_each(set1.rbegin(), set1.rend(), process);
return 0;
}
Унификация ассоциативных STL-контейнеров шаблонным параметром — компаратором