2011-06-09 15 views
7

çalışmasını sağlama Bu derlenmeyecektirstd :: map ayırıcısı ben son derece temel ayırıcı var

int main(int, char**) { 
    std::map<int, int, Allocator< std::pair<const int, int> > > map; 

    for (int i(0); i < 100; ++i) { 
     std::cout << "Inserting the " << i << " item. " << std::endl; 
     map.insert(std::make_pair(i*i, 2*i)); 
    } 

    return 0; 
} 

(gcc 4.6) ile biten son derece uzun hatayı vererek: std :: map gibi bir ile o 3 parametre karşılaştırıcı gibidir oysa ayırıcısı 4 şablon parametresi /usr/lib/gcc/x86_64-redhat-linux/4.6.0/../../../../include/c++/4.6.0/bits/stl_tree.h:959:25: error: no match for call to ‘(Allocator<std::pair<const int, int> >) (std::pair<const int, int>::first_type&, const int&)’

+0

Neden özel bir ayırıcıya ihtiyacınız olduğunu düşünüyorsunuz? Her şeyi doğru almak için –

cevap

16

Çünkü std::less? std::map<int, int, std::less<int>, Allocator< std::pair<const int, int> > > çalışmalıdır.

Ayrıca ben varsayılan ctor ve kopya ctor eklemek gerektiğini düşünüyorum:

durumda
Allocator() {} 

    template<class Other> 
    Allocator(const Allocator<Other>& _Right) {} 
+3

+1. sadece bir nit - varsayılan kurucu –

+3

gerek yok Bu bir jenerik dönüşüm kurucu, bir kopya kurucu değil. Ama varsayılan kurucu gereklidir… – Potatoswatter

0

birisi genelleştirilmiş yolu arayan eğer:

template<class Key, class T,class Compare = std::less<Key>, class _Ax = Allocator<std::pair<const Key, T> >> 
class Map : public std::map<Key, T, Compare, _Ax > 
{ 
}; 

Sonra kullanmak,

Map<int,char> myMap; 
myMap.insert<std::pair<int,char>(1,'o'); 
İlgili konular