
Как с помощьюлямбда выражений найти изолированную вершину графа? Объясните кто-нибудь,пожалуйста. Я хочу с помощбю class IsNotAnyVertex найти изолированную вершину в main.Вот код
// Граф задан набором дуг (неориентированных) и набором вершин.
Найти все изолированные вершины, т.е. вершины, из которых не исходит ни одной дуги.
include <string>
include <map>
include <vector>
include <iostream>
include <ostream>
include <fstream>
include <iterator>
include <algorithm>
pragma hdrstop
using namespace std;
struct KVertex
{
int Num;
KVertex() :Num(-1){}
explicit KVertex(int aNum) :Num(aNum){}
friend istream &operator>>(istream& is, KVertex & vx)
{
return is >> vx.Num;
}
friend ostream & operator<<(ostream& os, KVertex const& vx)
{
return os << "(" << vx.Num << ")";
}
};
struct KEdge
{
int NumBeg;
int NumEnd;
KEdge() :NumBeg(0), NumEnd(0){}
KEdge(int aNumBeg, int aNumEnd) :NumBeg(aNumBeg), NumEnd(aNumEnd){}
bool operator ==(KEdge const & e2) const
{
return (NumBeg == e2.NumBeg && NumEnd == e2.NumEnd);
}
friend istream& operator>>(istream& is, KEdge& ed)
{
return is >> ed.NumBeg >> ed.NumEnd;
}
friend ostream& operator<<(ostream& os, KEdge const& ed)
{
return os << "(" << ed.NumBeg << "," << ed.NumEnd << ")";
}
};
/class IsNotAnyVertex :public unary_function < KVertex const&, bool >
{
public:
IsNotAnyVertex(vector<KVertex> const& v) :v(v){}
bool operator()() const
{
???????????????????????
}
private:
vector<KVertex> const& v;
};/
class IsNotAnyEdges : public unary_function<KEdge const&, bool>
{
public:
IsNotAnyEdges(vector<KEdge> const& ve_) : ve(ve_) { }
bool operator () (KEdge const& e) const
{
return find_if(ve.begin(), ve.end(),[&e](KEdge const& x) { return (x.NumBeg == e.NumBeg || x.NumBeg == e.NumEnd) && !(x == e); }
) == ve.end();
} // = true, если e исходит из дуги x
private:
vector<KEdge> const& ve;
};
int main()
{
setlocale(LC_ALL, "Russian");
vector<KVertex> vv;
vector<KEdge> ve;
typedef istream_iterator<KVertex> is_iterVert;
typedef istream_iterator<KEdge> is_iterKEDge;
typedef vector<KEdge>::iterator iterator;
ifstream fi("inv.txt");
ofstream fo("outv.txt");
if (fi)
{
copy(is_iterVert(fi), is_iterVert(), back_inserter(vv));
fo << "Список вершин: ";
copy(vv.begin(), vv.end(), ostream_iterator<KVertex>(fo, " "));
}
else cout << "Файл inv.txt не открыт" << endl;
fo << endl;
ifstream fi_e("ine.txt");
if (fi_e)
{
copy(is_iterKEDge(fi_e), is_iterKEDge(), back_inserter(ve));
fo << "Cписок ребер: ";
copy(ve.begin(), ve.end(), ostream_iterator<KEdge>(fo, " "));
}
else cout << "Файл ine.txt не открыт" << endl;
fo << endl;
fo << "Упорядочиваем дуги по начальной вершине:" << endl;
auto IsLessEdge1 = [](KEdge const& e1, KEdge const& e2) { return e1.NumBeg < e2.NumBeg; };
sort(ve.begin(), ve.end(), [](KEdge const& e1, KEdge const& e2) { return e1.NumBeg < e2.NumBeg; });
copy(ve.begin(), ve.end(), ostream_iterator<KEdge>(fo, " "));
fo << endl;
typedef vector<KEdge>::iterator iterEdges;
fo << "Список дуг, из вершин которых не исходит ни одной дуги." << endl;
iterEdges itMiddle = partition(ve.begin(), ve.end(), IsNotAnyEdges(ve));
copy(ve.begin(), itMiddle, ostream_iterator<KEdge>(fo, " "));
fo << endl;
/*typedef vector <KVertex>::iterator iterVert;
KVertex ex(5);
vector<KVertex> vex(vv);
fo << "Список вершин из которых не выходит ни одной дуги:" << endl;
iterVert itCom = partition(vv.begin(), vv.end(), IsNotAnyVertex(vv));
copy(vv.begin(), itCom, ostream_iterator<KVertex>(fo, " "));
fo << endl;*/
system("pause");
return 0;



