Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Surgery
3 / 3 / 0
Регистрация: 28.09.2013
Сообщений: 32
#1

Собственный аллокатор и unordered_map - C++

22.03.2014, 11:30. Просмотров 510. Ответов 0
Метки нет (Все метки)

Имеется свой аллокатор. Для простоты приведу здесь максимально простой вариант, что бы не вводить лишние сущности, проблема с ним та же.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class myallocator : public std::allocator<T>
{
public:
    typedef size_t size_type;
    typedef T* pointer;
    typedef const T* const_pointer;
 
    template<typename _Tp1>
    struct rebind
    {
        typedef myallocator<_Tp1> other;
    };
 
    inline pointer allocate(size_type n)
    {
        return (pointer)(::operator new(n * sizeof(T)));
    }
 
    inline pointer allocate(size_type n, const void *hint)
    {
        return (pointer)(::operator new(n * sizeof(T)));
    }
 
    inline void deallocate(pointer p, size_type n)
    {
        ::operator delete(ptr);
    }
 
    myallocator() throw() : std::allocator<T>() { }
    myallocator(const myallocator &a) throw() : std::allocator<T>(a) { }
    ~myallocator() throw() { }
};
При использовании его с basic_string, vector все работает нормально. При использовании с unordered_map, вот так:
C++
1
2
3
template <class Kty, class ValTy> using fast_hash_map = std::unordered_map<Kty, ValTy, std::hash<Kty>, std::equal_to<Kty>, myallocator<std::pair<Kty, ValTy> > >;
//....
fast_hash_map<std::string, unsigned> map;
компилятор выдает ошибку
error C2664: "myallocator<_Newfirst>::myallocator(const myallocator<_Newfirst> &) throw()": невозможно преобразовать аргумент 1 из "const myallocator<std:: pair<astring,unsigned int>>" в "const myallocator<_Newfirst> &" C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\xmemory0 817
, ссылаясь на
C++
1
2
3
4
5
template<class _Other>
        _Wrap_alloc(const _Other& _Right) _THROW0()
        : _Mybase(_Right)
        {   // construct from a related allocator
        }
в библиотечном xmemory0.
Использую Visual Studio 2013. Просьба подсказать, что с моим несчастным аллокатором не так
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.03.2014, 11:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Собственный аллокатор и unordered_map (C++):

Пишем аллокатор - C++
дабы не захламлять и так уже захламленную тему про перегрузку операторов создаю новую тему, собственно по поводу аллокаторов прям...

Аллокатор в chrome - C++
Всем привет, начал изучать исходники хрома, в аллокаторе, метод realloc должен возвращать nullptr если передаваемый аргумент size равен...

Быстрый аллокатор - C++
Собственно, необходим аллокатор для быстрого выделения памяти под мелкие объекты, совместимый со стандартными контейнерами (std::list и...

Задача с собеседования (аллокатор памяти) - C++
Вопрос звучит так: &quot;Напишите быстрый аллокатор памяти&quot; Как я его понимаю: можно пожертвовать растратой памяти, всякими наворотами,...

Как написать пуловый аллокатор для работы с объектами - C++
Здравствуйте! Подскажите как написать пуловый аллокатор для работы с объектами

Работа с unordered_map - C++
очень прошу помочь! имеется вот такой код: struct LOCATION { DATA_TYPE type; unsigned int pos; }; typedef...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.03.2014, 11:30
Привет! Вот еще темы с ответами:

Hash_map unordered_map - C++
class P{ public: int x, y; friend bool operator&lt; (const P u, const P v) { if(u.x &lt; v.x) { return true; } else...

Сложность операции в unordered_map - C++
Везде пишут таблицы, в которых указывают, что сложность варьируется от О(1) до О(n) Но где найти ответ на вопрос &quot;Почему?&quot;. Напишите...

Поиск по нескольким unordered_map - C++
Есть несколько десятков unordered_map с одинаковым типом ключей (uint32_t) и разными данными внутри, ключи не пересекаются никогда, нужно...

Доступ к элементам unordered_map - C++
struct Foo { int a,b,c; }; std::unordered_map&lt;std::pair&lt;int32_t, int32_t&gt;, std::unordered_map&lt;uint32_t, Foo&gt;&gt; bar; int...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.