为什么我应该在结构中为 priority_queue 重载 () 运算符而不是 class?
Why I should overload the () operator for priority_queue in a struct instead of a class?
我想知道为什么下面的重载是错误的。
class comparator{
bool operator()(string& s1, string& s2) {
return s1[0] < s2[0];
}
};
int main()
{
priority_queue<string, vector<string>, comparator> myqueue;
myqueue.push("a");
myqueue.push("bb");
myqueue.push("ccc");
return 0;
}
它给出的错误是
operator() cannot access private member declared in class comparator.
当我使用 "struct" 而不是 "class" 时,它起作用了。
I am wondering why the following overloading is wrong.
因为用 class
关键字定义的 class 的默认访问说明符是私有的。您没有指定成员函数的访问说明符,因此使用默认值。
错误消息向您说明无法访问私有成员。私有函数只能在 class 范围内命名。由于你使用的模板没有定义在class的范围内,所以不能使用私有成员函数。
使用 struct
关键字定义的 class 的默认访问说明符是 public。 Public 函数可以从 class 定义之外命名,所以它在这里有效。
Why I should overload the () operator for priority_queue in a struct instead of a class?
您也可以使用 class
。但是您必须明确指定访问说明符。
P.S。默认访问说明符是使用关键字 class
定义的 class 和使用关键字 struct
定义的 class 之间的唯一区别(也称为结构)。
我想知道为什么下面的重载是错误的。
class comparator{
bool operator()(string& s1, string& s2) {
return s1[0] < s2[0];
}
};
int main()
{
priority_queue<string, vector<string>, comparator> myqueue;
myqueue.push("a");
myqueue.push("bb");
myqueue.push("ccc");
return 0;
}
它给出的错误是
operator() cannot access private member declared in class comparator.
当我使用 "struct" 而不是 "class" 时,它起作用了。
I am wondering why the following overloading is wrong.
因为用 class
关键字定义的 class 的默认访问说明符是私有的。您没有指定成员函数的访问说明符,因此使用默认值。
错误消息向您说明无法访问私有成员。私有函数只能在 class 范围内命名。由于你使用的模板没有定义在class的范围内,所以不能使用私有成员函数。
使用 struct
关键字定义的 class 的默认访问说明符是 public。 Public 函数可以从 class 定义之外命名,所以它在这里有效。
Why I should overload the () operator for priority_queue in a struct instead of a class?
您也可以使用 class
。但是您必须明确指定访问说明符。
P.S。默认访问说明符是使用关键字 class
定义的 class 和使用关键字 struct
定义的 class 之间的唯一区别(也称为结构)。