我想知道为什么std::map并std::set用作std::less默认函子来比较键。为什么不使用类似于 strcmp 的仿函数呢?就像是:
template <typename T> struct compare
{
// Return less than 0 if lhs < rhs
// Return 0 if lhs == rhs
// Return greater than 0 if lhs > rhs
int operator()(T const& lhs, T const& rhs)
{
return (lhs-rhs);
}
}
假设 amap有两个对象,带有键key1和key2。现在我们要插入另一个带有 key 的对象key3。
使用std::less时,insert函数需要先std::less::operator()用key1and调用key3。假设std::less::operator()(key1, key3)返回假。它必须std::less::operator()在切换键的情况下再次调用std::less::operator()(key3, key1),来决定key1是等于key3还是key3大于key1。如果第一个调用返回 false,则有两个调用来std::less::operator()做出决定。
如果std::map::insert使用compare,则只需一次调用即可获得足够的信息来做出正确的决定。
根据地图中键的类型,std::less::operator()(key1, key2)可能会很昂贵。
除非我遗漏了一些非常基本的东西,否则不应该使用类似的东西std::map而不是作为默认函子来比较键吗?std::setcomparestd::less