2016-02-04 35 views
0

我需要一個存儲排序順序的元素的向量(我也需要恆定時間的隨機訪問,所以不需要std::set)。我試圖通過私下繼承std::vector來實現這一點。向量的私有繼承,暴露相等運算符

template <typename T, typename Tcomp = less<T> > 
class SortedVector : private vector<T> { 

    Tcomp _comparator; 


public: 
    using vector<T>::operator[]; 
    using vector<T>::operator==; 
    using vector<T>::size; 

我有幾個問題:

  1. 它是一個壞主意,繼承std::vector私下?
  2. 我得到以下錯誤:

    SortedVector.h:26:30: error: no members matching ‘ std::vector<std::basic_string<char> >::operator== ’ in ‘ class std::vector<std::basic_string<char> >

有什麼建議?

+0

你真的需要* *'運算符=='在矢量上?如果是這樣,寫你自己的並不難。 –

+0

我確實需要它,是的,這並不困難,但我無法弄清楚爲什麼會出現這種錯誤。 – SPMP

+0

對於std :: vector,'operator ==()'是一個非成員函數。 – comingstorm

回答

3

只要它是私人繼承,沒關係,這裏大多是一個不太冗長的構圖。

對於==操作,則無法使用std::vector::operator==原因是沒有的,它被定義爲一個免費的功能,所以你必須自己申報一個,如果你需要它