将容器传递给 priority_queue 有什么用
What's the use of passing a container to priority_queue
每次您想为 priority_queue 使用自定义比较函数时,您也必须向它传递一个容器。在我看来,您应该始终将 vector<T>
传递给它。起初我认为这是某种冗余,但事实并非如此。将容器传递给 priority_queue
有什么用,我该如何使用它?
std::priority_queue
是容器适配器。它实际上并不知道如何存储您放入其中的元素;它将它委托给一个真实的容器,例如 std::vector
。您很少会想要使用 std::vector
以外的东西作为底层容器,但如果您愿意,可以使用 std::deque
。
std::vector
是默认值,但由于这是第二个模板参数,如果您想为第三个模板参数使用非默认值,则必须指定第二个,只需就像函数参数一样。
您只是将基础容器类型传递给它,默认情况下,它是 std::vector<T>
。如果你想保留默认行为,那么你说你总是可以通过 std::vector<T>
是正确的。您还可以使用 std::deque<T>
,或任何公开以下功能的自定义容器:
- 空()
- 尺寸()
- 前面()
- push_back()
- pop_back()
但为什么必须先指定容器才能指定比较器?好吧,这只与参数的定义方式有关。 container
和 compare
都是默认参数, container
恰好排在前面。由于 C++ 的工作方式,您只需传递导致 compare
的所有参数,然后才能传递它,这意味着您还必须传递 container
。据我所知,它与 compare
需要了解 container
.
无关
每次您想为 priority_queue 使用自定义比较函数时,您也必须向它传递一个容器。在我看来,您应该始终将 vector<T>
传递给它。起初我认为这是某种冗余,但事实并非如此。将容器传递给 priority_queue
有什么用,我该如何使用它?
std::priority_queue
是容器适配器。它实际上并不知道如何存储您放入其中的元素;它将它委托给一个真实的容器,例如 std::vector
。您很少会想要使用 std::vector
以外的东西作为底层容器,但如果您愿意,可以使用 std::deque
。
std::vector
是默认值,但由于这是第二个模板参数,如果您想为第三个模板参数使用非默认值,则必须指定第二个,只需就像函数参数一样。
您只是将基础容器类型传递给它,默认情况下,它是 std::vector<T>
。如果你想保留默认行为,那么你说你总是可以通过 std::vector<T>
是正确的。您还可以使用 std::deque<T>
,或任何公开以下功能的自定义容器:
- 空()
- 尺寸()
- 前面()
- push_back()
- pop_back()
但为什么必须先指定容器才能指定比较器?好吧,这只与参数的定义方式有关。 container
和 compare
都是默认参数, container
恰好排在前面。由于 C++ 的工作方式,您只需传递导致 compare
的所有参数,然后才能传递它,这意味着您还必须传递 container
。据我所知,它与 compare
需要了解 container
.