【问题标题】:Sort a vector of objects by a member of map in this vector按此向量中的映射成员对对象向量进行排序
【发布时间】:2018-11-14 07:59:27
【问题描述】:

我想我有一个非常简单的问题,但是... 我必须按自己的成员对向量进行排序,但我不能。

这是我用另一个向量中的对象填充向量的函数。 我必须按特定产品对向量 SortDealers 进行排序,但我不知道如何将 Stock 的名称发送给我的重载运算符

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"));
} 

这是重载运算符<:>

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);
}

【问题讨论】:

    标签: algorithm c++11 vector stl


    【解决方案1】:

    你可以使用仿函数:

    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"));
    

    您还可以使用 lambda 表达式在其捕获中提供股票名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-22
      • 2011-07-07
      • 1970-01-01
      • 1970-01-01
      • 2015-05-18
      • 1970-01-01
      相关资源
      最近更新 更多