- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试编写一个函数来打印 minheap 和 maxheap 的内容,但我在使用比较器时遇到了问题。我尝试使用三元运算符,但它不起作用,因为 std::less 和 std::greater 是不同的类型。我尝试使用比较器的方式有什么问题?
#include <functional>
template<typename T> void printheap (T* v, int begin, int end, bool max) {
end--;
std::binary_function<T,T,bool> comp;
if (max) comp = less<T>();
else comp = greater<T>();
while (end>=begin) {
cout << v[begin] << " ";
pop_heap(&v[begin], &v[end+1], comp );
end--;
}
cout << endl;
}
链接错误:
/usr/include/c++/4.6/bits/stl_heap.h:305:4: error: no match for call to ‘(std::binary_function<int, int, bool>) (int&, int&)’
编辑:
我也试过使用 binary_function 指针并在堆上分配,现在我得到了一个不同的错误:
template<typename T> inline void printheap (T* v, int begin, int end, bool max) {
...
std::binary_function<T,T,bool> *comp;
if (max) comp = new less<T>();
else comp = new greater<T>();
...
pop_heap(&v[begin], &v[end+1], (*comp) );
...
delete comp;
}
错误:
/usr/include/c++/4.6/bits/stl_heap.h:305:4: error: ‘__comp’ cannot be used as a function
最佳答案
您是 object slicing 的受害者.
当您分配 less<T>
时或 greater<T>
到 binary_function
类型,operator()
他们定义的消失了。
binary_function does not define operator(); it is expected that derived classes will define this. binary_function provides only three types - first_argument_type, second_argument_type and result_type - defined by the template parameters.
你应该通过 less<T>
或 greater<T>
直接在。您也可以使用 pointer_to_binary_function
, 但它们在 C++11 中都已弃用,取而代之的是 function
.
关于c++ - 无法为 std::less/std::greater 实例化 binary_function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12984145/
我在静态库 .a 中定义了一个 std::map,就像这样 ////////////////////////////////////// #import class CCImage; class I
template struct gSorting : public std::binary_function { bool operator() (int number, int n2)
我有一个字节数组,其中包含事件 ID 和一些 ID 的事件数据:{0x1, 0x2, 0x32}//例如,0x1 - eventId,0x2 - 它的数据,0x32 - 另一个事件 ID。 为了解析它
我正在使用 Visual Studio 2010 Beta 2(也尝试过使用 NetBeans),但我在以下代码中遇到了段错误: // One of the @link s20_3_3_compari
包括 #include using namespace std; int main() { binary_function operations[] = { plus(), minus(
std::binary_function现已弃用,将在 c++17 中删除.我搜索了不同的出版物,但我找不到替换它的确切方法。我想知道我应该如何在c++11中编写以下代码风格。 template i
我们目前正在使用一些 3rd 方包,这些包在内部使用了一些 std::binary_function、std::unary_function。您可能知道,这些函数在 C++14 中已被弃用,现在它们都
以下代码: $ cat test02.cpp #include #include #include #include #include struct myadd : public s
我阅读了有关二元和一元函数的教程。我了解它们的结构,但我无法想象在哪种情况下我需要这些功能。你能举个例子来说明它们的用法吗? http://www.cplusplus.com/reference/st
我注意到 std::binary_function is only a struct with typedefs .在链接中,它特别指出: binary_function does not defin
我有这个枚举(类) enum class conditional_operator { plus_op, or_op, not_op } 我想要一个代表这些映射的 std::m
我发现 binary_function 已从 C++11 中删除。我想知道为什么。 C++98: template struct less : binary_function { bool o
我注意到在c++17中binary_function被删除了。而且我不知道如何解决它。有人可以帮我改变结构吗?谢谢 我尝试通过谷歌搜索但找不到解决方案。Visual Studio 2019,C++17
我的 std::map 有一对“唯一键”和“唯一值”。我通常会为一个值找到一个键,并为一个键找到一个值。我已经知道使用 std::find_if + lambda 的方法,但是我想知道是否有更好的方法
1st 是的,我一直在使用 Visual Studio 2008,我相信这个错误是 Visual Studio 2008 特有的。 我正在尝试编写一个仿函数来比较我的结构中的 1 个成员,这样我就可以
我正在尝试编写一个函数来打印 minheap 和 maxheap 的内容,但我在使用比较器时遇到了问题。我尝试使用三元运算符,但它不起作用,因为 std::less 和 std::greater 是不
从 std::binary_function(或 std::unary_function)继承有什么好处? 例如我有这样的代码: class Person { public: Person(
我想尽可能避免代码重复。假设我有一个类,例如, class T { int val; bool operator < (const T& right) const { return v
我是一名优秀的程序员,十分优秀!