class Values{ ... bool valueToFind; ...};vector<Values *> valuesVector;
struct Pred { bool operator()(const Value* val) { return val->valueToFind; }};
std::find_if(vec.begin(), vec.end(), boost::bind(&Value::valueToFind, _1))илиstd::find_if(vec.begin(), vec.end(), boost::bind(&Value::valueToFind, _1) == val)
class Values{ ... bool valueToFind; int k; ...};vector<Values *> valuesVector;
struct Pred { bool operator()( const vector<Values*>::iterator &val,vector<Values*>::iterator &val1 ) { return ((*val)->valueToFind == (*val1)->valueToFind && (*val)->k == (*val1)->k); }};... // сортирую вектор, только не уверен, что так будет правильно sort( valuesVector.begin(), valuesVector.end() ); // затем удаляю дубликаты vector<Values*>::iterator it; //ума не приложу, как правильно вызвать Pred, как передать итераторы? it = unique( valuesVector.begin(), valuesVector.end(), Pred() ); valuesVector.erase( it, valuesVector.end() );
class Values{public:protected:private: int k; int l; bool valueStatus; struct LessThen { bool operator<( const Values* val1, const Values* val2 ) { return ((*val1)->k < (*val2)->k && (*val1)->l (*val2)->l); } }; struct EqualTo { bool operator==(const Values* val1, const Values* val2) { return ((*val1)->k == (*val2)->k && (*val1)->l == (*val2)->l && (*val1)->valueStatus == (*val2)->valueStatus)) ; } }; bool ifLessThen( const Values* val1, const Values* val2 ) { return val1 < val2; } bool ifEqualTo( const Values* val1, const Values* val2 ) { return val1 == val2; }};
vector<Values*> valuesVector;
//сортируюsort( valuesVector.begin(), valuesVector.end(), ifLessThen );// затем удаляю дубликатыvector<Values*>::iterator it;it = unique( valuesVector.begin(), valuesVector.end(), ifEqualTo );valuesVector.erase( it, valuesVector.end() );
Values* operator<(const Values&);
template <class RandIter, class Comp>void sort(RandIter start, RandIter end, Comp cmpfn);
Values* operator==(const Values&);
template<class ForIter, class BinPred>ForIter unique(ForIter start, ForIter end, BinPred pfn);
class Values{public:protected:private: int k; int l; ... inline Values* operator<(const Values*) { return (*val1)->k < (*val2)->k && (*val1)->l < (*val2)->l ? val1 : val2; } inline Values* operator==(const Values&) { return (*val1)->k == (*val2)->k && (*val1)->l == (*val2)->l ? val1 : val2; }};
vector<Values*> valuesVector;...//заполняю векторsort( valuesVector.begin(), valuesVector.end());vector<Values*>::iterator it;it = unique( valuesVector.begin(), valuesVector.end());valuesVector.erase( it, valuesVector.end() );
struct LessThen { bool operator ()(const Value* x, const Value* y) const { return ...//*x < *y; }};struct EqualTo { bool operator ()(const Value* x, const Value* y) const { return ...//*x == *y; }};...sort(valuesVector.begin(), valuesVector.end(), LessThen());valuesVector.erase( unique(valuesVector.begin(), valuesVector.end(), EqualTo), valuesVector.end());
class Values { int i; int j; bool status;};
vector<Values *>vectorValues;