Есть ли способ предопределить размер std::set в C++?

У меня есть вложенная карта, содержащая std::set<> STL. Есть ли способ предопределить максимальный размер набора в C++?

Ниже мой DS:

std::map<Key, std::map<classObj, std::set<classObj> > > 

Могу ли я определить максимальный размер std:: set без определения размера любой из карт, представленных выше в объявлении этого DS?

2 ответа

я могу определить максимальный размер std::set

Нет.


Для обеспечения ограничения вам следует рассмотреть возможность создания собственного типа данных для этой цели.

Например (только для иллюстрации):

template<typename T, std::size_t N>
class CustomSet
{
    ...
};

Тогда используйте ваш тип специального назначения вместо std::set

std::map<Key, std::map<classObj, CustomSet<classObj, 10>>>

редактировать

std::set принимает пользовательский распределитель. Можете ли вы предоставить свой собственный распределитель для достижения своей цели, вне меня. Тем не менее, лично я все равно сделал бы пользовательский тип данных.

Лучшее решение - обернуть std::set Класс и переопределить методы, которые могут добавить 11-й элемент: insert, emplace а также emplace_hint,

Основной шаблон прост:

template< typename Key,
          typename Compare = std::less<Key>,
          typename Allocator = std::allocator<Key>>
class restrictedSet : private std::set<Key, Compare, Allocator>
{
    int maxElem;
public:
    restrictedSet(int maxElem) : maxElem (maxElem) { }
    using set::iterator;
    using set::begin;
    using set::end;
    //etc
    std::pair<iterator,bool> insert( value_type const& value )
    {
       if (size==maxElem) return std::make_pair(std::prev(end()), false);
       return set::insert(value);
    }
Другие вопросы по тегам