- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
/* use <first> of a [std::pair] */
template<typename _type_, typename _pred_>
struct use_first {
use_first(_type_ val, _pred_ pred) { value = val; predicate = pred; }
template<typename _first_type_, typename _second_type_>
bool operator()(const std::pair<_first_type_, _second_type_> &pr)
{
return predicate(pr.first, value);
}
private:
_type_ value;
_pred_ predicate;
};
/* factory function: use it to init a [use_first] object */
template<typename _type_, typename _pred_>
use_first<_type_, _pred_> make_use_first(_type_ value, _pred_ pred)
{
return use_first<_type_, _pred_>(value, pred);
}
/* usage of [use_first] */
std::vector< std::pair<int, int> > lol;
std::vector< std::pair<int, int> >::iterator = std::find_if(lol.begin(), lol.end(), make_use_first(0, std::equal_to()));
собственно была проблема в том, что в контейнерах(например std::vector, std::deque) хранятся пары(std::pair) и зачастую нужно организовать какие-либо действия либо по первому(first), либо по второму(second) члену из std::pair.
приведен код только для first, ибо код для second немного похож
в итоге получилось сие поделие, а еще я люблю обмазаться несвежим....