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

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

Ниже мой DS:

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

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

0

Решение

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

Нет.


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

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

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

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

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

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

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

1

Другие решения

Лучшее решение — обернуть 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);
}
0

По вопросам рекламы [email protected]