有没有办法在c ++中预定义std :: set size?

时间:2015-04-10 06:26:47

标签: c++ dictionary set nested-map

我有一个包含std :: set<>的嵌套地图STL,有没有办法在c ++中预定义set的最大大小?

以下是我的DS:

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

我可以定义std :: set的最大大小而不定义此DS声明中上面任何地图的大小吗?

2 个答案:

答案 0 :(得分:1)

  

我可以定义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 :(得分:0)

最佳解决方案是封装std::set类并重新实现可添加第11个元素的方法:insertemplaceemplace_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);
    }