У меня есть вложенная карта, содержащая std :: set<> STL, есть ли способ предопределить максимальный размер набора в с ++?
Ниже мой DS:
std::map<Key, std::map<classObj, std::set<classObj> > >
Могу ли я определить максимальный размер std :: set без определения размера любой карты, представленной выше в объявлении этого DS?
я могу определить максимальный размер 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);
}