作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
假设我想对具有依赖于键比较器的通用类型的集合对象执行一些操作。
下面两种实现方式有区别吗?
template <class SetType, class KeyType>
bool CompareFirst1(SetType set, KeyType key)
{
return typename SetType::key_compare()(*set.begin(), key);
}
template <class SetType, class KeyType>
bool CompareFirst2(SetType set, KeyType key)
{
return set.key_comp()(*set.begin(), key);
}
最佳答案
是的。第一个默认构造一个新对象,该类型用作 Set 的比较对象。第二个返回并使用集合正在使用的比较对象的拷贝。
不同之处在于,如果用户在构造期间传入比较对象,它可能具有与默认构造的比较对象不同的内部状态。或者甚至可能无法默认构造该对象。您想使用第二种形式。
关于c++ - C++ 中的 key_compare 与 key_comp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21604319/
假设我想对具有依赖于键比较器的通用类型的集合对象执行一些操作。 下面两种实现方式有区别吗? template bool CompareFirst1(SetType set, KeyType key)
我是一名优秀的程序员,十分优秀!