Сортировать вектор объектов по элементу карты в этом векторе - PullRequest
0 голосов
/ 05 июня 2018

У меня очень простой вопрос, я думаю, но ... Мне нужно отсортировать вектор по его собственному члену, но я не могу.

Это моя функция для заполнения вектора объектами из другого вектора.,Мне нужно отсортировать вектор SortDealers по конкретному продукту, но я не знаю, как отправить имя акции моему оператору перегрузки <</p>

void CShop::sortVector(const CStock& s1)
{
    vector<CDealer> SortDealers;
    vector<CDealer* >::iterator it = Dealers.begin();
    while (it != Dealers.end())
    {
        if ((*(*it)).ComapareNameProducts(s1))
        {
            SortDealers.push_back(*(*it));
        }
        it++;

    }
    sort(SortDealers.begin(), SortDealers.end());
    copy(SortDealers.begin(), SortDealers.end(), ostream_iterator<CDealer>(cout, "\n"));
} 

это оператор перегрузки <: мне нужно отсортировать по неподписанномуУчастник карты.</p>

bool CDealer::operator<(const CDealer & o1)
{
    unsigned res1 = 0;
    unsigned res2= 0;
    map<const CStock, pair<unsigned, double>>::const_iterator it = Stock.begin();
    map<const CStock, pair<unsigned, double>>::const_iterator iter = o1.Stock.begin();
    while (it != Stock.end())
    {
        res1 += it->second.first;
        it++;
    }
    while (iter != o1.Stock.end())
    {
        res2 += iter->second.first;
        iter++;
    }
    return (res1 < res2);
}

1 Ответ

0 голосов
/ 05 июня 2018

Вы можете использовать функтор:

class less_than
{
    const string stockname;
    public:
    less_than(string s) : stockname(s) {}
    inline bool operator() const (const CDealer& a, const CDealer& b)
    {
        // use stockname here
    }
};

sort(SortDealers.begin(), SortDealers.end(), less_than("name"));

Также вы можете использовать лямбда-выражение, предоставляющее название акции при его захвате.

...