0

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

以下是我的 DS:

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

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

4

2 回答 2

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确实接受自定义分配器。您是否可以提供自己的分配器来实现您的目标,这超出了我的范围。但是,我个人仍然会制作自定义数据类型。

于 2015-04-10T06:42:58.813 回答
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);
    }
于 2015-04-10T07:52:54.680 回答