我们如何使用下面的集合构造函数示例构造集合元素?

Posted

技术标签:

【中文标题】我们如何使用下面的集合构造函数示例构造集合元素?【英文标题】:How can we construct a set element using the set constructor example below? 【发布时间】:2019-08-01 22:55:25 【问题描述】:

我一直在研究 c++ 的集合容器,但我被http://www.cplusplus.com/reference/set/set/set/ 提供的示例代码弄糊涂了,作为利用集合构造函数的示例。

我知道 set 有一个名为 comp 的输入参数来确定如何完成排序,但是当我在 http://www.cplusplus.com/reference/set/set/set/ 检查 set 的构造函数的声明时,我看不到以我们在下面创建 set 元素的方式接受两个参数作为模板参数的声明。有人可以向我解释一下这里调用了什么类型的集合构造函数以及这个特定的构造函数是如何工作的吗?

...

struct classcomp 
  bool operator() (const int& lhs, const int& rhs) const
  return lhs<rhs;
;

int main ()

  ...

  std::set<int,classcomp> fifth;                 // class as Compare

  ...

【问题讨论】:

默认参数。 【参考方案1】:

它实际上可以接受三个模板参数,但第二个和第三个是可选的:

https://en.cppreference.com/w/cpp/container/set

template<
    class Key,
    class Compare = std::less<Key>,
    class Allocator = std::allocator<Key>
> class set;

您使用的构造函数称为default constructor,但这与使用的模板参数没有任何关系。事实上,您创建的集合不带构造函数的参数,这使得它使用默认构造函数。

【讨论】:

哦,我明白了,由于模板参数的使用,我很困惑。我知道他们指定了类型并且现在不充当输入参数。我想,我将不得不阅读一些有关可选参数的信息。非常感谢!

以上是关于我们如何使用下面的集合构造函数示例构造集合元素?的主要内容,如果未能解决你的问题,请参考以下文章

已知权值集合 如何求其构造的哈夫曼树中带权路径长度之和 只求过程 急急急

有序列表

深入理解java集合框架之---------Arraylist集合 -----构造函数

如何在不破坏移动和复制构造函数的情况下声明虚拟析构函数

C#面向对象

程序实践系列使用类设计整数集合类