1)如果我希望集合按降序存储元素,我可以写:set<int, greater<int>> s;但我也可以set<int, greater<>> s;编译器如何理解这一点?2)为什么在下面的情况下vector<int> a;binary_search(a.begin(), a.end(), 5, greater<>());我必须写 Greater() ,而不是 Greater 。这有什么原因不能在所有地方都做同样的事情? 最佳答案 1) how does the compiler understand this?因为从 C++14 开始, T 的模板参数 std::greater 有一个默认值 void ;那么 std::greater<> 和 std::greater<void> 是一样的。 The standard library provides a specialization of std::greater when T is not specified, which leaves the parameter types and return type to be deduced.和 2) This has some reason why it could not be done the same everywhere?因为 binary_search 是一个函数并且期望它的参数是对象。 greater<>(即 greater<void> )是 类型 ,而 greater<>() 是 对象 (它是 binary_search(a.begin(), a.end(), 5, greater<>()); 上下文中的临时对象)。顺便说一句:在 set<int, greater<>> s; 中,您将 greater<> 指定为模板参数。 std::set 的第二个模板参数是 type template parameter ,那么可以指定 greater<> (它是 类型 )作为模板参数。关于c++ - 作为比较器的函数类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60225307/
10-13 02:07