Как сделать сабж. используя stl?
Нужно как-то группировать по отдельным полям, но что-то в голову ничего не идет.
Вот код, основной интерес представляет ф-ция less
#include <vector>
#include <iostream>
#include <iterator>
#include <algorithm>
#include <string>
struct A
{
A(std::string const& s, int n): s(s), n(n){}
static void print(A const& a)
{
std::cout << a.s.c_str() << "\t" << a.n << std::endl;
}
// compare function!
static bool less(A const& lhs, A const& rhs)
{
return lhs.s < rhs.s || (lhs.s < rhs.s && lhs.n < rhs.n);
}
private:
std::string s;
int n;
};
void test2()
{
// init
std::vector<A>v;
v.push_back(A("a", 0));
v.push_back(A("b", 1));
v.push_back(A("a", 1));
v.push_back(A("c", 2));
v.push_back(A("a", 1));
v.push_back(A("a", 0));
v.push_back(A("b", 1));
v.push_back(A("z", 1));
v.push_back(A("z", 0));
v.push_back(A("z", 5));
// print expected result
std::cout << "expected" << std::endl;
std::cout << "a\t0" << std::endl;
std::cout << "a\t0" << std::endl;
std::cout << "a\t1" << std::endl;
std::cout << "a\t1" << std::endl;
std::cout << "b\t1" << std::endl;
std::cout << "b\t1" << std::endl;
std::cout << "c\t2" << std::endl;
std::cout << "z\t0" << std::endl;
std::cout << "z\t1" << std::endl;
std::cout << "z\t5" << std::endl;
// sort and print final result
std::cout << "final" << std::endl;
std::sort(v.begin(), v.end(), A::less);
std::for_each(v.begin(), v.end(), A::print);
}
int main(int argc, char* argv[])
{
test2();
return 0;
}