通过访问私有成员在C ++中对向量进行排序

时间:2013-05-12 13:10:36

标签: c++ sorting vector private-members

我正在研究一个项目,我必须对矢量进行排序,但我遇到了一些困难。

class CService {
    private:
        string m_strSeller;
    public:
        // Other stuff.
};

class CAnalizeTime : public CService {
    private:
        void sortSellerVector () {
            vector<CService>m_vData;
            m_vData.push_back(m_strSeller);
            sort(m_vData.begin(), m_vData.end());
        }
};

我的void sortSellerVector()函数出现了2个错误:

  1. 无法访问“CService”类
  2. 中声明的私有成员
  3. 无法转换为'class std :: basic_string,class std :: allocator&gt;'到'const class CService'
  4. 我的问题是:

    1. 如何从其他班级访问私人会员?
    2. 第二个错误究竟是什么意思?我不明白。

1 个答案:

答案 0 :(得分:4)

为了能够对vector<CService>进行排序,最简单的方法是让CService operator<重载std::sort可以用来对元素进行排序。当然,如果operator<重载是成员函数,则此m_strSeller重载将可以访问class CService { private: string m_strSeller; public: bool operator<(const CService& other) const { return m_strSeller < other.m_strSeller; } /////..... (other stuff) };

vector<CService> vData;
// Push some CServices into the vector
sort(vData.begin(), vData.end());

然后你可以这样做:

std::sort

另一种方法是使用您提供给CService的比较功能。您可以将其设为class CService { private: string m_strSeller; public: friend bool compare(const CService&, const CService&); /////..... (other stuff) }; bool compare(const CService& a, const CService& b) { return a.m_strSeller < b.m_strSeller; } 的朋友,以便它可以访问私人成员:

vector<CService> vData;
// Push some CServices into the vector
sort(vData.begin(), vData.end(), compare);

然后您可以这样使用:

{{1}}